I am working with Active Directory using C#. Instantiating the PrincipalContext object seems to be expensive, so I’d like to store one in a class variable.
When using PrincipalContext as a local variable, I can use the convenient using syntax. When storing an IDisposable object in a static variable, how do I ensure the object is properly disposed of?
The general pattern for this is to implement the
IDisposableinterface on your class. Take this example:This is, at a minimum, what you need to do.
EDIT
My previous version advocated following the finalizer pattern in all cases, which was (correctly) pointed out to be against the framework design guidelines. However, in the event that you’re actually dealing with unmanaged resources (for example, you’re making direct P/Invoke calls and obtaining a handle that needs to be explicitly freed) it’s advisable that you create a finalizer and call
Disposewithin it to protect against people who consume your code and don’t callDispose: