我在using
周围有一个IDisposable DirectoryEntry
块来创建目录条目,访问其中一个属性,然后处理它。但是,目录条目在使用块结束之前处理。
public static PropertyValueCollection GetProperty(
this Principal principal, string propertyName)
{
using (var directoryEntry = principal.GetAsDirectoryEntry())
{
return directoryEntry.Properties[propertyName];
}
}
public static DirectoryEntry GetAsDirectoryEntry(
this Principal principal)
{
return principal.GetUnderlyingObject() as DirectoryEntry;
}
错误在return directoryEntry.Properties[propertyName];
行引发,表示目录条目已经处理完毕。我可以删除使用块,代码将工作,但我担心该对象永远不会被处置。我多次调用它,因此创建的目录条目的多个实例也从未被处理过?
答案 0 :(得分:5)
您的代码不是创建DirectoryEntry
实例,也不是Principal.GetUnderlyingObject()
方法(不是工厂方法)。由于您的代码不管理实例的生命周期,因此您的代码不应该处理它。
在这种特殊情况下,Principal.GetUnderlyingObject()
返回的实例实际上存储在Principal
实例的状态中。处理一次后,在同一个Principal.GetUnderlyingObject()
实例上对Principal
的每次后续调用都将返回相同的,先前处置的实例。