2009-04-21 10 views
3

は次のようになります。依存性注入とModelStateWrapper

ProductService(IValidationDictionary validationDictionary, IProductRepository repository) 

と、デフォルトのコントローラのコンストラクタでそのインスタンスは、次のように作成されます:私はユニティを使用したい場合は

public ProductController() 
{ 
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository()); 

} 

DIの場合は、2番目のコンストラクタを使用する必要があります。

public ProductController(IProductService service) 
{ 
    _service = service; 
} 

しかし、私は、コントローラ内に作成され、ProductServiceに、このような依存関係を注入することが可能にinjected.Isことができない、ModelStateWrapperはコントローラからにModelStateを使用しているため、ProductServiseの最初のパラメータを注入するためにUnityを設定するか分からないしていません?

答えて

0

ここで

は、あなたが何をしようとしてです:

  • 製品コントローラを作成するためにあなたが製品サービス
  • を必要とする製品・サービスを作成するために、あなたは、製品のコントローラ

を必要とするあなたが持っています悪質なサークル、それはあなたがそれをすることができない理由です。

私が実装ユニティについて知らないが、概念的には、円を分割する必要があり、このように:

  • それに製品サービスを通過することなく、製品のコントローラを作成し、製品のサービスやパス製品のコントローラのモデル状態を作成します製品のコントローラに注入製品サービス
  • それにプロパティ注射を介して

私の知る限りの統一は、プロパティインジェクションをサポートしていますが、属性に属性を追加する必要があります。もし私があなただったら、もっと侵襲性の低い容器を使うことを考えています。

+0

サンクス、今私は円の依存関係を見ています。私はこのような一般的な方法で作成UnityHelperことによってそれを解決: 公共TManager CreateEntityManager (TInnerInterface innerImplementation) {this.RegisterInstance (innerImplementation)。 これを返す。(); } これ以上の解決策はありません。 IProductService target = unity.CreateEntityManager (modelStateWrapper); ご協力ありがとうございます /erik –