unity-container - 代码分析警告 CA2000 : Call Dispose on object 'new ContainerControlledLifetimeManager()'

标签 unity-container code-analysis fxcop

我的一些单元测试收到代码分析警告:

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/

相关文章:

c# - Unity IOC 和工厂模式以及存储库模式

Java: Sonar 强制构造函数

asp.net-mvc-3 - 任何人都可以解释 CA1822 在 Controller 操作上的目的和解决方案吗?

c# - 外汇警察: "Types that own disposable fields should be disposable"

c# - 依赖注入(inject)刷新缓存

c# - quartz 、Unity 和 .NET

c# - 如何正确地将 `TempDataDictionary` 注入(inject)到我的类中?

visual-studio-2015 - 当 VS2013 非常满意时,为什么 VS2015 给我代码分析错误?

asp.net - 宪兵 vs FxCop

msbuild - SonarQube MSBuild-Runner 使用项目文件中的自定义 FXCop 规则