Unity 2.0 будет иметь метод IsRegistered
, который вы можете использовать, чтобы узнать, был ли тип зарегистрирован в контейнере.
Бета-версия Unity 2.0 доступна в Codeplex с 10 февраля. Посмотрите примечания к выпуску и загрузите его здесь; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1
UPDATE:
Загрузил и протестировал бета-версию Unity 2.0 27 февраля 2010 года, и он уже готов к работе. Если вы используете Unity 1.2 сегодня, вам придется проделать большую работу, чтобы заставить работать Unity 2.0 из-за неполного (?) Интерфейса IUnityContainer. Поэтому, если вы хотите, чтобы метод IsRegistered работал сегодня, вы можете создать метод расширения следующим образом:
public static class UnityContainerExtensions
{
public static bool IsRegistered<T>(this IUnityContainer container)
{
try
{
container.Resolve<T>();
return true;
}
catch
{
return false;
}
}
}
Обратите внимание, что я не использую ResolveAll
здесь. Причина этого заключается в том, что ResolveAll
не возвращает регистрацию по умолчанию (без имени), как указано в документах Unity:
Этот метод полезен, если вы зарегистрировали несколько типов с одним и тем же типом, но разными именами.
Имейте в виду, что этот метод НЕ возвращает экземпляр для регистрации по умолчанию (без имени).