Проверка того, зарегистрирован ли тип в Unity

Могу ли я проверить, зарегистрирован ли тип в контейнере Unity, не вызывая Resolve и не перехватывая исключение?


person johnc    schedule 25.01.2009    source источник


Ответы (2)


В Unity 2.0 будет метод IsRegistered, который вы можете использовать, чтобы узнать, зарегистрирован ли тип в контейнере.

Первая бета-версия Unity 2.0 доступна на Codeplex с 10 февраля. См. примечания к выпуску и загрузите его здесь; http://unity.codeplex.com/wikipage?title=Unity2%20Beta1

ОБНОВИТЬ:

Загрузил и протестировал первую бета-версию 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:

Этот метод полезен, если вы зарегистрировали несколько типов с одним и тем же типом, но с разными именами.

Имейте в виду, что этот метод НЕ возвращает экземпляр для регистрации по умолчанию (без имени).

person Kjetil Klaussen    schedule 27.02.2010

Ваш единственный другой вариант (в настоящее время) - использовать ResolveAll<T>() и перечислить результаты.

person Mitch Wheat    schedule 25.01.2009