2011-07-14 1 views
2

コマンドが依存関係を必要とするときはいつでもプロパティーインジェクションを利用しなければなりませんか?DIはどこでCQSと適合しますか?

次のコマンドがあります。

public class AddReviewCommand 
{ 
    private ISession _session; 
    private readonly string _reviewSummary; 

    public AddReviewCommand(string reviewSummary) 
    { 
     _reviewSummary = reviewSummary; 
    } 

    public void Execute() 
    { 
     var review = new Review 
      { 
       AddedBy = Environment.Username, 
       AddedDateTime = DateTime.Now, 
       ReviewSummary = _reviewSummary 
      }; 

      _session.Save(review); 
    } 
} 

注射する唯一の方法はISessionですか?

答えて

2

プロパティインジェクションは、依存はめったに正しい不変ではありませんこれは、オプションであることを意味します。 コンストラクタインジェクションははるかに適切なパターンです:

public class AddReviewCommand 
{ 
    private ISession _session; 
    private readonly string _reviewSummary; 

    public AddReviewCommand(string reviewSummary, ISession session) 
    { 
     _reviewSummary = reviewSummary; 
     _session = session; 
    } 

    public void Execute() 
    { 
     var review = new Review 
     { 
      AddedBy = Environment.Username, 
      AddedDateTime = DateTime.Now, 
      ReviewSummary = _reviewSummary 
     }; 

     _session.Save(review); 
    } 
} 
+0

返信ありがとうございます。私が尋ねた理由は、私はいくつかのコマンドの1つを実行できるフォームを持っているということです。私は私のサービス(または何でも)コンストラクタに各コマンドを注入することは想像できません。 – gcso

+0

なぜですか?いくつか問題になることはありません。もしあなたが多すぎると、サービス自体がSRPに違反するというシグナルではないでしょうか? –

+0

はい、あなたは絶対に正しいです。私はそれを考えなかった。コメントありがとう。 – gcso

関連する問題