我的一些单元测试收到代码分析警告:
WidgetManagerTests.cs (40): CA2000 : Microsoft.Reliability : In method 'WidgetManagerTests.TestInitialize()', call System.IDisposable.Dispose on object 'new ContainerControlledLifetimeManager()' before all references to it are out of scope.
我正在使用 Unity 和 Moq,这是违规行:
var loggingServiceMock = new Mock<ILoggingService>();
this.unityContainer.RegisterInstance<ILoggingService>(loggingServiceMock.Object, new ContainerControlledLifetimeManager());
最佳答案
CA2000 实现对在一次性实例“移交”给另一个方法之前可能引发异常的情况非常敏感。在这种情况下,即使在注册过程中没有发生异常时容器最终会清理生命周期管理器,也有可能在 RegisterInstance 调用之前或在调用中但在容器将生命周期管理器添加到它之前发生异常。自己的内部状态。
为了解决这种可能性,您可以使用如下代码(尽管我自己可能不会为此烦恼,除非处置做了重要的事情):
var loggingServiceMock = new Mock<ILoggingService>();
var lifetimeManager = new ContainerControlledLifetimeManager();
try
{
this.unityContainer.RegisterInstance<ILoggingService>(loggingServiceMock.Object, lifetimeManager);
}
catch
{
lifetimeManager.Dispose();
throw;
}
关于unity-container - 代码分析警告 CA2000 : Call Dispose on object 'new ContainerControlledLifetimeManager()' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256104/