使用Unity容器

时间:2017-01-12 22:27:37

标签: c# asp.net-mvc wcf unity-container

我正在使用ASP.NET MVC开发一个现有的C#Web应用程序,目标是.NET 4.5。它使用Unity for IoC,自定义生命周期管理器看起来等同于每个请求(我相信它是在PerRequestLifetimeManager添加到Unity之前设置的)。该项目还使用实体框架与SQL Server数据库进行通信,并使用WCF客户端与Web服务进行通信。

注册的类型是:映射到其类的几个自定义服务接口(这些接口当前都没有实现IDisposable),映射到WCF客户端的派生类的接口,以及DBContext的派生类。

我对IoC很新;我已经做了一些阅读准备添加日志记录任务,我认为代码库中存在问题。我稍后会发布有关我计划更改的后续问题,但我想先确保现有代码是正确的。

服务类将其WCF和DBContext派生类作为属性注入:

[Dependency]
public IMyWCFClient MyWCFClient { get; set; }
[Dependency]
public MyDBContextDerivedClass MyDBContext { get; set; }

我相信这对于DBContext属性是可以的,因为它实际上不需要Dispose'd,但是对于WCF客户端我认为它永远不会被正确清理 - Close()是从不手动调用,永远不会手动调用Dispose(),并且服务不会实现IDisposable。此外,从我的阅读中可以看出,在服务上实现IDisposable并在其WCF客户端属性上调用Dispose()是错误的,而我们需要调用Close(),检查许多异常,如有必要,请致电Abort()

我认为目前的实施是一个问题我是否正确?

如果是这样,我找到了ChannelAdam WCF库(https://www.nuget.org/packages/ChannelAdam.Wcf),它看起来像是一个很有前景且希望不太痛苦的方法来解决这个问题 - 这是一种合理的方法吗?

编辑:另外,我是对的,我不需要担心清理DBContext吗?

0 个答案:

没有答案