2011-07-14 58 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

感謝您的答覆。我問的原因是我有一個表單可以執行幾個命令之一。我無法想象將每個命令注入到我的服務(或其他)構造函數中。 – gcso

+0

爲什麼不呢?一些不會是一個問題。如果你有太多的人,那不就是服務本身違反SRP的信號嗎? –

+0

是的,你是對的。我沒有想到這一點。感謝您的評論。 – gcso