我有大约 6 个 WCF 服务,我想在 MVC 应用程序 中托管,将请求路由到 /services/foo
到 WcfFooService
和 /services/bar
到 WcfBarService
我可以在服务中使用 StructureMap 完成 IoC,并使用 Jimmy Bogard 博客中关于 here 的示例注入(inject)我的构造函数依赖项:
Jimmy 的文章很棒,但我正在尝试扩展它以处理托管在同一 MVC 应用程序中的多个服务。本质上,底部的部分是让我头疼的部分:
public class StructureMapServiceHostFactory : ServiceHostFactory
{
public StructureMapServiceHostFactory()
{
ObjectFactory.Initialize(x => x.AddRegistry<FooRegistry>());
//var iTriedThisToo = ObjectFactory.Container;
//container.Configure(x => x.[etc]);
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new StructureMapServiceHost(serviceType, baseAddresses);
}
}
使用单个 WCF 服务 - 通过 将 MVC 请求路由到特定的 url,上面显示的 StructureMapServiceHostFactory 工作得很好 - 但是 - 如果(例如)我为StructureMapServiceHostFactory2
调用,以允许使用不同的注册表,当 MVC 应用程序启动时,它似乎在通过 RouteConfig.cs 运行并添加路由时依次调用每个工厂,因此最终我没有获得配置的实例第一个 ServiceHostFactory 应该提供。
如果我调用 /services/bar
或尝试获取 Initialize();
属性并在其上调用 Container
都没有区别。
我是不是在躲避这个?需要注册表隔离的主要原因是不同的 NHibernate 配置,但我可以为 NHibernate 目的配置 SessionFactory 和 Session 的命名实例,然后使用单个注册表来解决这个问题。在我看来,我希望 WCF 服务和 MVC 托管能够独立使用它们自己的 IoC 容器,这就是我走这条路的原因。
有什么方法可以实现吗?
最佳答案
好吧,似乎只有我能回答这个问题,通过重新思考和“重新设计”解决方案,让问题从一开始就不存在。
我现在有一种有效的方法来托管这些服务并使用 StructureMap 为每个服务整齐地维护 IoC,而没有任何冲突的问题。
如果您发现自己处于与 SOA 接管(SOATO?)相似的位置 - 退后一步是一个好的开始;)
关于c# - 如何在 MVC 中托管多个 IoC 驱动的 WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15447293/