Я читал статьи на MSDN о Unity (внедрение зависимостей, инверсия управления), но думаю, мне нужно объяснить это в простых терминах (или простых примерах). Я знаком с шаблоном MVPC (мы используем его здесь), но я пока не могу по-настоящему понять эту вещь Unity, и я думаю, что это следующий шаг в разработке нашего приложения.
c#
dependency-injection
inversion-of-control
unity-container
Райан Эбботт
источник
источник
Ответы:
Unity - это просто «контейнер» IoC. Google StructureMap и попробуйте вместо этого. Я думаю, что немного проще, когда я начинаю с нововведениями в IoC.
По сути, если вы понимаете IoC, то понимаете, что то, что вы делаете, инвертирует контроль, когда объект создается.
Без IoC:
С контейнером IoC:
Без IoC ваш класс, опирающийся на IMyService, должен обновить конкретную версию службы для использования. И это плохо по ряду причин (вы связали свой класс с конкретной конкретной версией IMyService, вы не можете легко выполнить модульное тестирование, вы не можете легко изменить его и т. Д.)
С контейнером IoC вы «конфигурируете» контейнер для разрешения этих зависимостей за вас. Таким образом, при использовании схемы внедрения на основе конструктора вы просто передаете интерфейс зависимости IMyService в конструктор. Когда вы создаете MyClass с вашим контейнером, ваш контейнер разрешит зависимость IMyService для вас.
Используя StructureMap, настройка контейнера выглядит следующим образом:
Итак, вы сказали контейнеру: «Когда кто-то запрашивает IMyService, дайте ему копию SomeConcreteService». И вы также указали, что когда кто-то запрашивает MyClass, он получает конкретный MyClass.
Это все, что делает контейнер IoC. Они могут сделать больше, но в этом суть - они разрешают зависимости для вас, поэтому вам не нужно (и вам не нужно использовать ключевое слово «new» во всем коде).
Последний шаг: когда вы создаете свой MyClass, вы должны сделать это:
Надеюсь, это поможет. Не стесняйтесь, напишите мне.
источник
Я только что посмотрел 30-минутный скринкаст IoC по инъекции зависимостей от Unity Дэвида Хейдена и почувствовал, что это хорошее объяснение примерами. Вот фрагмент из заметок шоу:
Скринкаст демонстрирует несколько распространенных способов использования Unity IoC, таких как:
источник
Unity - это библиотека, как и многие другие, которая позволяет вам получить экземпляр запрошенного типа, не создавая его самостоятельно. Так дано.
Вы бы использовали библиотеку, например Unity, чтобы зарегистрировать Calculator, который будет возвращен, когда запрашивается тип ICalculator, также известный как IoC (инверсия управления) (этот пример теоретический, а не технически правильный).
Итак, теперь, когда вам нужен экземпляр ICalculator, вы просто ...
Библиотеки IoC обычно можно настроить для хранения одиночного или нового экземпляра при каждом разрешении типа.
Теперь предположим, что у вас есть класс, который зависит от наличия ICalculator, который вы могли бы иметь ...
И вы можете настроить библиотеку для вставки объекта в конструктор при его создании.
Таким образом, DI или Dependency Injection означает внедрение любого объекта, который может потребоваться другому.
источник
Этот парень WilcoxTutorials дает отличную демонстрацию контейнера Unity, который предназначен для начинающих.
Часть 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Часть 2: http://www.youtube.com/watch?v=PsIbevgzQQE
Менее чем за полчаса и вы поймете основы!
источник
Единство - это МОК. Смысл IoC состоит в том, чтобы абстрагировать зависимости между типами вне самих типов. Это имеет пару преимуществ. Прежде всего, это делается централизованно, что означает, что вам не нужно менять много кода при изменении зависимостей (что может быть в случае модульных тестов).
Кроме того, если подключение выполняется с использованием данных конфигурации, а не кода, вы можете фактически перезаписать зависимости после развертывания и, таким образом, изменить поведение приложения без изменения кода.
источник
В MSDN есть Руководство разработчика по внедрению зависимостей с использованием Unity, которое может оказаться полезным.
Руководство разработчика начинается с основ того, что такое внедрение зависимостей, и продолжается примерами использования Unity для внедрения зависимостей. По состоянию на февраль 2014 года Руководство разработчика охватывает Unity 3.0, выпущенное в апреле 2013 года.
источник
Я рассматриваю большинство примеров внедрения зависимостей в ASP.NET Web API 2
В DIAutoV2Controller.cs используется механизм Auto Injection
В DIV2Controller.cs все будет введено из класса Resolver Configuration Dependency Configuration.
Конфигурирование решателя зависимостей
источник