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

标签 c# wcf asp.net-mvc-4 structuremap

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

我可以在服务中使用 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/

相关文章:

C# WCF 关闭 channel 并使用函数 Func<T>

c# - 带有电子邮件地址参数的 WebApi 方法从 HttpClient 返回 404

c# - 您在 LoB 应用程序中使用 ServiceReferences 吗?

c# - 来自 C# 的 crypto-js DES 解密

c# - 根据该行中字段的值隐藏 gridview 中的行

c# - 具有状态/错误代码结果的事件目录身份验证

asp.net-mvc-4 - ASP.NET MVC 4 默认模板在 _LoginPartial.cshtml 中有不同的注销语法

c# - 表单提交上 HiddenFor 的替代方案?

c# - 调用者未经服务验证

wcf - 可以同时以JSON(P)和XML响应并且仍用作SOAP Web服务的RESTful WCF服务吗?