Я использую инфраструктуру инъекции зависимости netnet в приложении.Как справиться с изменениями конструктора при инъекции зависимостей
Этот проект использует некоторые «сторонних библиотек» (библиотеки закодированы другими командами в той же компании)
зарегистрировать некоторые классы «машина» из моей библиотеки третьей стороны, таким образом:
unityContainer.RegisterType<ICar,Car>();
сейчас , люди, которые разрабатывают класс «Автомобиль», решают, что было бы лучше, если бы конструктор взял логическое значение внутри конструктора.
Когда я получаю новую версию своей библиотеки, мой код разбивается во время выполнения (я не могу обнаружить ошибку в трубопроводе сборки):
Разрешающая параметр \ «hasRadio \» из конструктора автомобилей Разрешающая System.Boolean (нет) \ г \ п», "ExceptionType": "Microsoft.Practices.Unity.ResolutionFailedException" ...
Так что мой вопрос не будет, как бы вам удалось избежать подобных проблем
является ли это вопрос передовой практики для введения правил, таких как «никогда не использовать примитивы в конструкторах»?
Это мое тестовое покрытие, которое недостаточно хорошо? Например, следует ли проверять, что все классы моего графа зависимости единства создаются с помощью InjectionConstructor, когда конструктор классов содержит некоторый примитив? (Я даже не уверен, что это можно сделать с UnityContainer, чье поле регистрации не возвращает InjectionConstructors)
Должен ли я всегда создавать классы из сторонних библиотек явно (с помощью InjectionFactory), чтобы убедиться, другая команда меняет конструкторы без изменения моего кода? (Я не очень доволен этой опцией, так как она нарушает принцип введения зависимостей: /)
Да, ваше тестовое покрытие не достаточно хорошее - у вас должен быть модульный тест, который проверяет, могут ли типы создаваться так, как это делает производственный код (в вашем случае через Unity), и, следовательно, изменение, которое принимает версия новой библиотеки, должно быть отвергнутым во время сборки ... Как вы решите, что другая библиотека не удобна для контейнера DI по вашему выбору, зависит от вас ... (Вы, очевидно, видели http://stackoverflow.com/questions/787001/can -i-pass-constructor-parameters-to-unitys-resolve-method передать аргументы конструктора ...) –