Мне действительно нужно вызывать Dispose() для каждого Принципала?
Я делаю некоторую работу Active Directory с.NET System.DirectoryServices.AccountManagement
Пространство имен. Я заметил, что Principal
инвентарь IDisposable
, что вызывает головную боль, так как все в этом пространстве имен наследуется Principal
,
Например, рассмотрите следующий код, чтобы получить всех пользователей в группе:
PrincipalContext domain = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(domain, "MyGroup");
PrincipalSearchResult<Principal> users = group.GetMembers();
Каждый тип в этом фрагменте реализует IDisposable
, включая всех пользователей, возвращаемых поиском, и сам набор результатов поиска.
Избавление от domain
а также group
объекты не имеет большого значения (было бы легко с using()
блок), но что мне делать с каждым результатом? Я действительно должен пройти через это users
сбор и утилизация каждого?
1 ответ
IDisposable
Контракт - это просто контракт. Ожидается, что будет следовать. Они бы не реализовали контракт, если бы вам не "нужно было позвонить в Dispose"...
В действительности вы не можете точно сказать, какой тип объекта используется конкретным экземпляром Principal
Иногда вам нужно избавиться от этого, иногда нет. У вас действительно нет способа рассказать об этом во время выполнения, если вы не знакомы с некоторыми внутренностями конкретного инструмента Principal
, Например, если базовый объект в экземпляре принципа является DirectoryEntry
тогда вы должны избавиться от него. Но у вас нет реального способа сказать во время выполнения, что это за базовый объект. Даже если бы вы могли, было бы проще позвонить Dispose
,