Подтвердить что ты не робот

Структуры внедрения инъекций: Почему меня это волнует?

Я читал Injection by Hand и Ninjection (а также Зачем использовать Ninject). Я столкнулся с двумя путями:

  • Инъекция с помощью ручной техники, с которой я уже знаком, но я не знаком с Ninjection и поэтому не знаю, как будет работать полная программа. Возможно, это поможет обеспечить полную программу, а не, как это делается на этой странице, показывая программу, разбитую на части

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

4b9b3361

Ответ 1

При вводе ваших зависимостей без рамки DI вы получаете код со стрелкой по всему вашему приложению, рассказывающий классы о том, как создавать свои зависимости.

    public Contact()
        : this(new DataGateWay())
    {
    }

Но если вы используете что-то вроде Ninject, весь код стрелки находится в одном месте, что упрощает изменение зависимости для всех классов, использующих его.

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}

Ответ 2

Я до сих пор не понимаю, как это облегчает ситуацию. Я думаю, что мне не хватает чего-то важного.

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

Что мешает нам сделать это, нужна ли нам инфраструктура, которая может каким-то образом автоматически комбинировать и управлять этими компонентами в рабочем приложении. Инфраструктура, которая делает это, доступна нам - структура МОК.

Таким образом, структура IOC не связана с управлением зависимостями, тестированием или конфигурацией. Вместо этого речь идет об управлении сложностью, позволяя вам работать и думать только о компонентах.

Ответ 3

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

Это все о сцеплении и сцеплении.

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

Ответ 4

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

EDIT: Я прочитал эту статью Айенде @Рахиена. И я действительно поддерживаю его.

Ответ 5

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

Ответ 6

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

Ответ 7

Инъекция зависимостей необходима для Компонентная разработка. Последнее позволяет создавать действительно сложные приложения гораздо более эффективным и надежным способом.

Кроме того, он позволяет полностью разделять общие сквозные проблемы с другим кодом (это приводит к более многоразовой и гибкой кодовой базе).

Ссылки по теме: