現在C#とNinjectを使ったDIについて学習を進めております.

コンストラクタ・Setter・メソッドの引数の型にインターフェイスを使う方法(※1)と比較して,DIコンテナを使う方法(※2)が優れている点がわかりません.

    interface IPerson { string Name(); }
    class Sol : IPerson { string Name() { return "Sol"; } }
    class Ky : IPerson { string Name() { return "Ky"; } }

    class PersonManager
    {
        private IPerson _p;
        <Inject> public PersonManager(IPerson p) { _p = p; }
        public string SayMyName() { return _p.Name(); }
    }

    // ※1
    void Test1()
    {
        var sol = new PersonManager(new Sol());
        sol.SayMyName();
    }

    // ※2
    void Test2()
    {
        var kernel = new StandardKernel();
        kernel.Bind<IPerson>().To<Sol>();
        kernel.Bind<PersonManager>().ToSelf();

        var sol = kernel.Get<PersonManager>();
        sol.SayMyName();
    }

以下の記事を参考にコードを書きました.
参考:taediumの日記 Ninjectを使ってみた http://d.hatena.ne.jp/taedium/20100307/p1

※1,※2のどちらの場合でもPersonManagerIPersonにのみ依存し,Test1Test2はどちらもSolに依存しているので,依存関係に関しては※1,※2どちらが優れているということは無いと考えています.

※2は※1よりコードが複雑になっていますし,どういう場面でDIコンテナを使用するといいのかがわかりません.

DIコンテナを使用するとこういう場面で非常に役に立つ,という例を教えてください.
C#以外の言語,Ninject以外のDIコンテナでも構いません.

以下追記 2015.06.30

皆さんありがとうございます.

特に@thubさん, @unaristさんのコメントで理解が深まりました.

端的に言えばnew Sol(new Hoge(new Foo()), MAGIC_NUMBER, new Bar())のように生成が複雑になった場合,DIコンテナを使ったほうが便利.ということだと理解しました.

また,DIコンテナ側の機能で,オブジェクトのスコープをSingletonやThreadLocalにできたり,Privateなフィールド,メソッドにDIできるというのは確かなメリットだと感じました.

追記の追記(読み飛ばして結構です) 2015.07.01

私の質問の仕方が良くなかったのですが,この質問はDI自体のメリットを聞くつもりではなく,DIのコードを自分で書く場合と,DIコンテナを使った場合の差が知りたい.という意図で質問をしたつもりでした.InterfaceによるDIは日常的に行っており,そのメリットも理解・体感しております.

DIのコードを自分で書く場合も,DIコンテナを使う場合でも,オブジェクトの生成ルールを書く際は具象クラスに依存する.DIコンテナのオブジェクト生成ルールを書く場合も,自分でFactoryメソッドを用意する場合と比較してコード量も減るようには見えない.どこにメリットがあるんだろう?という疑問からの質問でした.

みなさんのコメントのおかげでとても理解が深まりました.ありがとうございました.