2009-01-25 5 views

Répondre

12

Unity 2.0 aura une méthode IsRegistered que vous pouvez utiliser pour déterminer si un type a été enregistré dans le conteneur.

La version bêta1 de Unity 2.0 est disponible sur Codeplex à partir du 10 février. Voir les notes de version et téléchargez-le ici; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1

MISE À JOUR:

téléchargé et testé Unity 2.0 beta 1 le 27 février 2010, et il est de loin la production encore prêt. Si vous utilisez Unity 1.2 aujourd'hui, vous devrez faire un travail important pour obtenir Unity 2.0 en raison de l'interface incomplète (?) IUnityContainer. Donc, si vous voulez avoir la méthode de travail isRegistered aujourd'hui, vous pouvez faire une méthode d'extension comme ceci:

public static class UnityContainerExtensions 
{ 
    public static bool IsRegistered<T>(this IUnityContainer container) 
    { 
     try 
     { 
      container.Resolve<T>(); 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
} 

Notez que je ne suis pas ici en utilisant ResolveAll. La raison est que ResolveAll ne reviendra pas la valeur par défaut (sans nom) l'enregistrement comme indiqué dans la documentation Unity:

Cette méthode est utile si vous avez enregistré plusieurs types avec le même type, mais des noms différents. Sachez que cette méthode ne renvoie PAS une instance pour l'enregistrement par défaut (sans nom).

+0

Merci pour la mise à jour. – johnc

2

Votre seule autre option (actuellement) est d'utiliser ResolveAll<T>() et d'énumérer les résultats.

+0

Soupçonné ainsi, merci – johnc

Questions connexes