我正在使用C#使用Active Directory.实例化PrincipalContext对象似乎很昂贵,所以我想将一个存储在一个类变量中.
当使用PrincipalContext作为局部变量时,我可以使用方便的使用语法.将IDisposable对象存储在静态变量中时,如何确保对象被正确处理?
解决方法
一般模式是在您的类上实现IDisposable接口.举个例子:
public class YourClass : IDisposable { private OtherDisposableType yourResource; public YourClass() { yourResource = new OtherDisposableType(); } public void Dispose() { yourResource.Dispose(); } }
这至少是您需要做的事情.
编辑
我之前的版本主张在所有情况下遵循终结器模式,这是(正确地)指出是违反框架设计指南.但是,如果您实际上正在处理非托管资源(例如,您正在进行直接P / Invoke调用并获取需要显式释放的句柄),建议您创建终结器并在其中调用Dispose防止使用代码并且不调用Dispose的人:
public class YourClass : IDisposable { private OtherDisposableType yourResource; public YourClass() { yourResource = new OtherDisposableType(); } public void Dispose() { yourResource.Dispose(); GC.SuppressFinalize(this); } ~YourClass() { Dispose(); } }