2016-05-10 3 views
3

Я использую контейнер единства для разрешения зависимостей внутри приложения.Проверка регистрации типов контейнеров единым целым

Зависимости и их зависимости (и т. Д.) Зарегистрированы в app.config, так как мне нужно изменить способ поведения приложения в процессе производства.

Иногда типы регистрации для зависимостей пропущены, и это появляется только тогда, когда экземпляр типа разрешен во время жизни приложения, что означает, что могут возникнуть проблемы, которые могут быть устранены только во время тестирования интеграции - что не идеально.

Я хочу, чтобы иметь возможность программно проверять (возможно, как часть процесса сборки CI), что регистрации типа единства были сделаны правильно. Под этим я подразумеваю, что если я разрешу экземпляр типа, я могу быть уверенным, что зависимости этого типа (через впрыск конструктора) также регистрируются и будут разрешены.

Мне нужно только проверить конфигурацию по умолчанию, изменения, внесенные на живые сайты, здесь не рассматриваются. Кроме того - я не хочу использовать жестко закодированные регистрации.

Единственный способ, которым я могу думать делать это на данный момент, чтобы разобрать файл конфигурации единства и попытаться решить каждый экземпляр типа нашла ...

Есть ли более простой способ проверки, что единство регистрации ВСЕ присутствуют?

ответ

1

Что касаемо

Я хочу, чтобы иметь возможность проверить программно (возможно, как часть процесса сборки CI ), что регистрации типа единства были сделаны правильно . Под этим я подразумеваю, что если я разрешаю экземпляр типа, то я может иметь уверенность в том, что зависимости этого типа (через конструктор ) также регистрируются и будут разрешены.

У нас была такая же ситуация в одном из наших проектов, и мы закончили писать интеграционные тесты и прочитали Unity.config, а затем ищем регистрацию набранного объекта как строки. Очень похож на подход описан ниже https://blogs.msdn.microsoft.com/miah/2009/04/03/testing-your-unity-xml-configuration/

Проблемы с этим вы должны поддерживать как регистрацию и испытание, но это единственный способ, вы можете проверить все типы зарегистрированы правильно.

Просто сравнение xml с ожидаемыми значениями более эффективно, чем повторная регистрация всех ваших типов (на основе вашей конфигурации) и их решение в тестах.

1

Я использую единство и часто сталкиваюсь с этой проблемой.

Вы можете написать приложение, которое использует отражение для получения параметров конструктора. Что-то вроде этого: ConstructorInfo.GetParameters(); и рекурсивно получить параметры каждого возвращаемого параметра. Если вы сделаете этот список отличным, это, по крайней мере, даст вам список ожидаемых типов, которые должны быть зарегистрированы.

Надеюсь, это поможет.

+0

Это звучит неплохо. У вас есть пример? – Jay

1

Этот модульный тест, кажется, достаточно, чтобы проверить мою конфигурацию до сих пор. Следуя инструкциям на https://msdn.microsoft.com/en-us/library/dn507504(v=pandp.30).aspx, я смог загрузить мой контейнер и проверить, были ли разрешены все регистрации.

[TestMethod] 
    public void TestContainer() 
    { 
     IUnityContainer container = new UnityContainer().LoadConfiguration(); 
     foreach (var registration in container.Registrations) 
     { 
      Assert.IsNotNull(container.Resolve(registration.RegisteredType, registration.Name)); 
     } 
    } 
Смежные вопросы