4

問題

Ninject のような依存性インジェクターをコード内のいつ、どこで使用する必要があるかを理解するのにいくつか問題があります。

コード

たとえば、次のコードがあるとします。

//WITHOUT NINJECT:     
IMailSender mailSender = new MockMailSender();

//WITH NINJECT:
IMailSender mailSender = kernel.Get<IMailSender>();

これは依存性注入ではないので、このシナリオで Ninject を使用するのは理にかなっていますか?

別の例は、依存性インジェクターを使用することで私のコードが実際にめちゃくちゃになる方法を示しています。

 public void CalculateRevenueRecognitions(IContract contract)
    {
        //WITH NINJECT
        var kernel = new StandardKernel(new DefaultModule());
        var arguments = new List<IParameter>
        {
            new ConstructorArgument("amount",contract.Revenue),
            new ConstructorArgument("date", contract.WhenSigned)
        };
        contract.AddRevenueRecognition(kernel.Get<IRevenueRecognition>(arguments.ToArray()));

        //WITHOUT NINJECT:
        contract.AddRevenueRecognition(new RevenueRecognition(contract.Revenue, contract.WhenSigned))));
    }

質問

依存性インジェクターはいつ使用する必要がありますか?

  1. コンストラクター注入、パラメーター注入などについて。
  2. オブジェクトの作成について (依存性インジェクターは、従来のオブジェクトの作成を新しいものに置き換えますか?)
  3. 他は?

依存関係インジェクターを使用すべきでないのはいつですか?

4

3 に答える 3

3

私は過去に依存性注入フレームワークを広く使用してきました。地獄、私も書いた(登録と解決をNinjectより何光年も速く実行するが、忍者、KiteShields手裏剣などの楽しい単体テストモデルを借りることができてうれしかった.

最近では、依存性注入フレームワークを使用することはほとんどありません。(重い)フレームワークの使用から1つのことを学んだ場合、それは次のとおりです。

技術的な問題があります。問題を解決するフレームワークを検索して実験します。1 つを選択して、どこでも使用できます。

今、あなたには2つの問題があります。依存性注入フレームワークが原因で、コードベース全体に大きな依存関係が生じました。

フレームワークに関する Greg Young ( http://skillsmatter.com/podcast/agile-testing/simple-is-better ) による SkillsMatter の素晴らしいプレゼンテーションがあります。それらの中で、私は難しい方法を学びました、私は同意します.

于 2013-08-24T00:04:13.383 に答える