Tom*_*son 3 code-analysis fxcop unity-container
我在一些单元测试中收到代码分析警告:
WidgetManagerTests.cs(40):CA2000:Microsoft.Reliability:在方法'WidgetManagerTests.TestInitialize()'中,在对所有引用超出范围之前,在对象'new ContainerControlledLifetimeManager()'上调用System.IDisposable.Dispose.
我正在使用Unity和Moq,这是违规行:
var loggingServiceMock = new Mock<ILoggingService>();
this.unityContainer.RegisterInstance<ILoggingService>(loggingServiceMock.Object, new ContainerControlledLifetimeManager());
Run Code Online (Sandbox Code Playgroud)
CA2000实现对于在将一次性实例"切换"到另一个方法之前可能抛出异常的情况非常敏感.在这种情况下,即使容器在注册期间没有异常发生时最终会负责清理生命周期管理器,但可能在RegisterInstance调用之前或在调用期间但在容器将生命周期管理器添加到其之前发生异常.自己的内部状态.
为了解决这种可能性,你可以使用类似下面的代码(虽然我可能不会自己打扰这个,除非处理做了一些重要的事情):
var loggingServiceMock = new Mock<ILoggingService>();
var lifetimeManager = new ContainerControlledLifetimeManager();
try
{
this.unityContainer.RegisterInstance<ILoggingService>(loggingServiceMock.Object, lifetimeManager);
}
catch
{
lifetimeManager.Dispose();
throw;
}
Run Code Online (Sandbox Code Playgroud)