【问题标题】:Do I really need to call Dispose() on every Principal?我真的需要在每个 Principal 上调用 Dispose() 吗?
【发布时间】:2013-01-28 07:23:32
【问题描述】:

我正在使用 .NET 的 System.DirectoryServices.AccountManagement 命名空间进行一些 Active Directory 工作。我注意到Principal 实现了IDisposable,这让人有点头疼,因为该命名空间中的所有东西 都继承了Principal

例如考虑以下代码来获取组中的所有用户:

PrincipalContext domain = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(domain, "MyGroup");
PrincipalSearchResult<Principal> users = group.GetMembers();

该 sn-p 中的每个类型都实现了IDisposable,包括搜索返回的所有用户和搜索结果集本身。

处理domaingroup 对象并不是什么大问题(使用using() 块会很容易),但是我该如何处理每个结果呢?我真的需要遍历 users 集合并处理掉每一个吗?

【问题讨论】:

标签: .net resources dispose iprincipal groupprincipal


【解决方案1】:

IDisposable 合同就是这样一个合同。预计会被遵循。如果您不需要“调用 Dispose”,他们就不会执行合同......

实际上,您无法真正分辨出Principal 的特定实例正在使用哪种类型的对象,有时,您确实必须处理它,有时您不' t。除非您知道Principal 的特定实现的一些内部结构,否则您真的无法在运行时进行判断。例如,如果 Principle 实例中的底层对象是 DirectoryEntry,那么您应该处置它。但是,您没有真正的方法在运行时告诉底层对象是什么。即使您可以,只需致电Dispose 似乎更容易。

【讨论】:

  • 对,我知道所有东西都需要处理掉。我只是觉得我“负责”的内容令人困惑。我通常的假设是,如果我实例化一个对象,我负责清理它,但这显然不适用于这些类。 MSDN 文档完全没有帮助:他们的大多数示例根本没有 Dispose() 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2022-01-25
  • 2018-03-23
相关资源
最近更新 更多