4

チュートリアルでは、ProductServiceのサービスレイヤーコンストラクターを使用した検証は次のようになります。

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)

デフォルトのコントローラーコンストラクターのインスタンスは、次のように作成されます。

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

}

Unity for DIを使用したい場合は、明らかに2番目のコンストラクターを使用する必要があります。

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

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

4

1 に答える 1

0

考え。

これがあなたがやろうとしていることです:

  • 製品コントローラを作成するには、製品サービスが必要です
  • 製品サービスを作成するには、製品コントローラーが必要です

あなたは悪循環を持っています、それがあなたがそれをすることができない理由です.

Unity の実装についてはわかりませんが、概念的には、次のように円を壊す必要があります。

  • 製品サービスを渡さずに製品コントローラを作成する
  • 製品サービスを作成し、製品コントローラのモデル状態をそれに渡します
  • プロパティ注入を介して製品サービスを製品コントローラーに注入します

AFAIK unity はプロパティ インジェクションをサポートしていますが、属性をプロパティに配置する必要があります。私があなただったら、より侵襲性の低いコンテナを使用することを検討します (ほとんどの場合、他のコンテナの方が優れています)。

于 2009-04-22T08:52:21.107 に答える