.net resources dispose iprincipal groupprincipal

.net - ¿Realmente necesito llamar a Dispose() en cada Principal?



resources iprincipal (1)

Estoy trabajando en Active Directory con el espacio de nombres System.DirectoryServices.AccountManagement de .NET. Noté que Principal implementa IDisposable , lo que causa una especie de dolor de cabeza ya que todo en ese espacio de nombres hereda el Principal .

Por ejemplo, considere el siguiente código para obtener todos los usuarios en un grupo:

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

Todos los tipos de ese fragmento implementan IDisposable , incluidos todos los usuarios devueltos por la búsqueda y el resultado de búsqueda establecido por sí mismo.

Deshacerse de los objetos de domain y group no es un gran problema (sería fácil con un bloque using() ), pero ¿qué debo hacer con cada resultado? ¿Realmente tengo que recorrer esa colección de users y deshacerme de cada uno de ellos?


El contrato IDisposable es solo eso, un contrato. Se espera que sea seguido. No habrían implementado el contrato si no "necesitaran llamar a Dispose" ...

En realidad, no se puede decir realmente qué tipo de objeto está siendo utilizado por una instancia particular de Principal A veces, hay que eliminarlo, otras veces no . Realmente no tienes una forma de contar en tiempo de ejecución a menos que conozcas algunos de los aspectos internos de un implemento particular de Principal . Por ejemplo, si el objeto subyacente en la instancia de Principio es un DirectoryEntry , entonces debe deshacerse de él. Pero no tienes forma de decir en tiempo de ejecución cuál es ese objeto subyacente. Incluso si pudiera , parecería más fácil simplemente llamar a Dispose .