Puis-je tester si un type a été enregistré dans un conteneur Unity sans appeler de résolution et intercepter l'exception?Test si un Type a été enregistré dans Unity
Répondre
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).
Votre seule autre option (actuellement) est d'utiliser ResolveAll<T>()
et d'énumérer les résultats.
Soupçonné ainsi, merci – johnc
Merci pour la mise à jour. – johnc