我正在使用 Autoface 创建一个新的 MVC4 站点,该站点具有公共消费者站点以及用于管理面向消费者站点的管理区域。管理站点将位于不同的区域,使用与面向消费者的站点相同的服务,但不具有某些自定义品牌功能。
我遵循了其他地方给出的建议,即拥有一个 ViewDataFactory,它提供一组共享数据供视图使用。我的目标是根据您所在的区域提供不同的 ViewDataFactory。
例如,这里是实现 IViewDataFactory 的服务
builder.RegisterType<SelfServiceViewDataFactory>().As<IViewDataFactory>();
这给了我一个 ViewFactory,它被注入到我所有的控制器中。但是我想要实现的是这样的(不是功能代码):
builder.RegisterType<ViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase1);
builder.RegisterType<DifferentViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase2);
控制器类型或 MVC 区域将确定解析哪个服务。
编辑
为了澄清我的帖子有两个问题:
- Autofac 中有没有办法说“仅对于 X 类型的类,Y 类型的服务将由实例 Z 提供”?
- 有没有办法根据使用组件的区域来更改 Autofac 行为?
从我一直在阅读的所有内容来看,#1 的答案似乎是“否”,除非您有一个参数可用于检查要提供的组件。我知道 Ninject 可以提供基于命名空间的依赖项,因此其他框架似乎可以处理这种情况。似乎解决方案是提供一个参数或定义两个不同的服务。
我还没有真正看到太多关于 Autofac 和 MVC 领域的讨论,所以我猜如果没有自定义解决方案,#2 也是不可能的。谢谢!