Мне действительно нужно вызывать 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,

Другие вопросы по тегам