Платформы Внедрения зависимости: Почему я забочусь?

Из MSDN на Dns.GetHostAddresses ,

Когда в качестве имени хоста передается пустая строка, этот метод возвращает адреса IPv4 локального хоста для всех операционных систем. кроме Windows Server 2003; для Windows Server 2003 возвращаются адреса IPv4 и IPv6 для локального хоста.

Адреса IPv6 фильтруются по результатам метода GetHostAddresses, если на локальном компьютере не установлен IPv6. В результате, можно получить пустой экземпляр IPAddress, если только результаты IPv6 доступны там, где они доступны для параметра hostNameOrAddress.parameter.

Итак, вы можете использовать это, чтобы попытаться разобрать его :

IPAddress.TryParse

, а затем проверить AddressFamily, который

возвращает систему .Net.Sockets.AddressFamily.InterNetwork для IPv4 или System.Net.Sockets.AddressFamily.InterNetworkV6 для IPv6.

string input = "192.168.0.10";

IPAddress address;
if (IPAddress.TryParse(input, out address))
{
    switch (address.AddressFamily)
    {
        case System.Net.Sockets.AddressFamily.InterNetwork:
            // we have IPv4
            break;
        case System.Net.Sockets.AddressFamily.InterNetworkV6:
            // we have IPv6
            break;
        default:
            // do something else
            break;
    }
}

18
задан Brian 17 May 2011 в 20:31
поделиться

7 ответов

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

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

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

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}
6
ответ дан 30 November 2019 в 09:15
поделиться

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

Все дело в сплоченности и связности.

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

3
ответ дан 30 November 2019 в 09:15
поделиться

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

EDIT : Я прочитал эту статью Ayende @ Rahien . И я действительно поддерживаю его точку зрения.

2
ответ дан 30 November 2019 в 09:15
поделиться

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

1
ответ дан 30 November 2019 в 09:15
поделиться

Dependency Injection is essential for the Component Driven Development. The latter allows to build really complex applications in a much more efficient and reliable manner.

Also, it allows to separate common cross-cutting concerns cleanly from the other code (this results in more reusable and flexible codebase).

Related links:

0
ответ дан 30 November 2019 в 09:15
поделиться

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

0
ответ дан 30 November 2019 в 09:15
поделиться

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

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

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

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

4
ответ дан 30 November 2019 в 09:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: