0

ファイルのアップロードとダウンロードを処理する汎用コントローラーを開発しています。私のドメインには、任意のファイルを保持する一般的なエンティティと、このエンティティを参照して特定のファイル参照を保持する他の子エンティティが含まれています。

一般エンティティ用のサービスと、子固有のエンティティ用の多くのサービスがあります。

ここに私のスクラッチがあります:

public class FileController : BaseController
{
  public JsonResult GetAll(IService childService) { /*lot of code*/}
  public FileResult Download(int id, IService  childService) { /*lot of code*/}
  public JsonResult Post(IService childService) { /*lot of code*/}
  public JsonResult Delete(IService childService) { /*lot of code*/}
}

特定のサービスをアクションに挿入するにはどうすればよいですか?

このようにしないと、どこでも同じことをしているジャンキー コードがたくさんできてしまいます。別の方法はありますか?もしかして自分の知らないパターン?

4

1 に答える 1

3

アクションに注入するのではなく、サービスをクラスに注入します。

public class FileController : BaseController
{
    private IService _childService;

    public IService ChildService { set { _childService = value; } }

    public JsonResult GetAll() { /*lot of code*/}
    public FileResult Download(int id) { /*lot of code*/}
    public JsonResult Post() { /*lot of code*/}
    public JsonResult Delete(IService childService) { /*lot of code*/}
}

ControllerFactory次に、拡張するカスタムを作成し、それをファイルDefaultControllerFactoryで指定しGlobal.asaxます。

最後に、カスタムControllerFactoryクラスでCreateControllerメソッドをオーバーライドし、コントローラーの作成時に IService インスタンスを挿入します。

于 2013-11-05T12:40:54.900 に答える