如何在MVC中托管多个IoC驱动的WCF服务?

Spa*_*son 6 c# structuremap wcf asp.net-mvc-4

我身边有6 WCF服务,我想在一个托管MVC应用程序,将请求路由到/services/fooWcfFooService/services/barWcfBarService

我可以在服务中使用StructureMap 完成IoC,并使用Jimmy Bogard在这里写博客的示例注入我的构造函数依赖项:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用单个 WCF服务 - 通过上面显示的StructureMapServiceHostFactory 将MVC请求路由到特定URL 的工作非常出色 - 但是 - 如果(例如)我StructureMapServiceHostFactory2/services/bar调用创建了一个,以允许使用不同的注册表,当MVC应用程序旋转时up,它似乎依次调用每个工厂,因为它运行RouteConfig.cs并添加路由,所以最终我没有得到第一个ServiceHostFactory应该提供的配置实例.

如果我打电话Initialize();或试图抓住Container房产并打电话给它也没有什么区别Configure.

我这个隐藏到什么都没有?需要注册表隔离的主要原因是由于NHibernate配置不同,但我可以为NHibernate目的配置SessionFactory和Session的Named实例,然后使用单个注册表来解决这个问题.在我看来,我希望WCF服务和MVC托管能够独立使用自己的IoC容器,这就是我走这条路的原因.

有什么方法可以实现这个目标吗?

Spa*_*son 0

好吧,看来唯一有能力回答这个问题的人就是我,通过重新思考和“重新构建”解决方案,使问题从一开始就不存在。

我现在有一种有效的方法来托管这些服务,并使用 StructureMap 整齐地维护每个服务的 IoC,而不会出现任何冲突的问题。

如果您发现自己处于 SOA 接管的类似位置(SOATO?) - 退后一步是一个好的开始;)