【问题标题】:IoC Conflicts within a WCF ServiceWCF 服务中的 IoC 冲突
【发布时间】:2013-04-10 07:47:06
【问题描述】:

我们创建了几个处理异步请求的 WCF 服务。我们使用basicHttpBinding,因此我们的InstanceContextModePerCall,这就是造成一些混乱的原因。我们看到使用 Microsoft 的 Unity 容器注入的应用程序的这些部分出现异常行为。

我们正在解析下面的引用以创建一个在整个应用程序中使用的 Foo 单例。然而,当服务被快速连续命中时,Foo 偶尔会抛出异常,表明它正被多个线程访问,并因此以意想不到的方式改变了它的状态。

Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());

现在,如果我们将生命周期管理器更改为 TransientLifetimeManager - 本质上是告诉容器在每次解决该类时注入一个新实例,问题就会得到纠正。

Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager());

据我了解,WCF 不控制 AppDomain 的生命周期,主机控制。在我们的例子中,就是 IIS。那么,鉴于这些信息,我们的PerCall WCF 请求是否可能正常工作,但由于 AppDomain 的管理方式,我们是否可以访问同一个注入对象,因为它的单例实现?

感谢您的宝贵时间!

【问题讨论】:

  • Unity 是在 IInstanceProvider 行为中创建的,还是以不同的方式注入依赖项?

标签: c# wcf ioc-container appdomain application-lifecycle


【解决方案1】:

看看 UnityWcf。我尝试了几种不同的方法来将 Unity 中对象的生命周期与 WCF 中的 InstanceContextMode 对齐。这很好用:

http://unitywcf.codeplex.com

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多