.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
.