Все еще нужна помощь в понимании, почему Ninject может быть лучше, чем ручной DI

Это расширение вопроса Зачем мне нужен контейнер IoC, а не простой код DI?

Я изучал Ninject и придумал следующий пример, пример проходит через руководство способ выполнения DI и способ выполнения DI с помощью Ninject:

class Program
{
    static void Main(string[] args)
    {
        NinjectWay();
        ManualWay();
        Console.ReadKey();
    }

    private static void ManualWay()
    {
        Console.WriteLine("ManualWay***********************");
        IWeapon sword = new Sword();
        Samurai samurai = new Samurai(sword);

        Console.WriteLine(samurai.Attack("ManualWay..."));

        // change weapon
        IWeapon dagger = new Dagger();
        samurai.Weapon = dagger;

        Console.WriteLine(samurai.Attack("ManualWay..."));

        IWeapon weapon = new Shuriken();
        IWarrior ninja = new Ninja(weapon);
        Console.WriteLine("Manual way.. inject shuriken when a ninja. " + ninja.Weapon.Name);

        IWarrior ninja2 = new Ninja(weapon);
    }

    private static void NinjectWay()
    {
        Console.WriteLine("NinjectWay***********************");
        IKernel kernel = new StandardKernel();
        kernel.Bind().To();
        var samurai = kernel.Get();

        Console.WriteLine(samurai.Attack("NinjectWay..."));

        kernel.Rebind().To();
        samurai = kernel.Get();

        Console.WriteLine(samurai.Attack("NinjectWay..."));

        kernel.Bind().To().WhenInjectedInto();
        var ninja = kernel.Get();
        ninja.OffHandWeapon = new ShortSword();

        Console.WriteLine("Conditional Injection..."+ninja.Weapon.Name);
        Console.WriteLine("Conditional Injection: OffhandWeapon = " + ninja.OffHandWeapon.Name);

        var ninja2 = kernel.Get();
        Console.WriteLine("Conditional Injection..." + ninja2.Weapon.Name);
        Console.WriteLine("Conditional Injection: OffhandWeapon = " + ninja2.OffHandWeapon.Name);

        Console.WriteLine("");
    }
}

Я слышал, что выгоды появляются, когда масштаб проекта увеличивается, но я этого не вижу. Помогите мне лучше понять это. Приведите больше примеров на C # / Ninject и помогите мне понять, где преимущества действительно проявляются.

8
задан Community 23 May 2017 в 12:04
поделиться