1

別のコントローラーに継承された BaseController がありますが、

ベースコントローラー:

public partial class BaseController : Controller
{
        private readonly IUnitOfWork _uow;
        private readonly INewsService _newsService;

        protected BaseController(IUnitOfWork uow, INewsService newsService)
        {
            _uow = uow;
            _newsService = newsService;
        }

//...

}

コントローラの 1 つ:

public partial class HomeController : BaseController
{

    private readonly IUserService _userService;
    private readonly IMemberService _memberService;
    private readonly IUnitOfWork _uow;
    public HomeController(IUnitOfWork uow, IUserService userService, IMemberService memberService, INewsService newsService): base(uow, newsService)
    {
        _userService = userService;
        _memberService = memberService;
        _uow = uow;
    }

//...
}

しかし、t4mvcで生成されたクラスの各コントローラーでこのエラーが発生します。たとえば、次のエラーです。

'MvcApp.Controllers.BaseController' does not contain a constructor that takes 0 arguments.

HomeController.generated.csファイルで。

解決

https://stackoverflow.com/a/15320890/1719207

4

4 に答える 4

1

これは、T4MVC ベース コントローラーにデフォルト コンストラクターがないのと似ています。

ベースコントローラーを抽象化できますか? もしそうなら、私はそれがうまくいくと信じています。

于 2013-03-10T01:49:30.667 に答える
1

IOC コンテナ (存在する場合) がデフォルトのコントローラ ファクトリを上書きしていないようです。Ninject を使用している場合は、Ninject.MVC3 プロジェクトをインストールする必要があります。各コンテナは、デフォルトのコントローラ ファクトリをオーバーライドして、ビルドして依存関係を注入できるようにする必要があります。

StructureMap の場合、 StructureMap.MVC3またはStructureMap.MVC4が必要です。

于 2013-03-09T17:47:45.967 に答える
1

この種の依存関係を持つコントローラーはにおいがします。最近知った専門用語です^_^

1 つには、アクション フィルターに UoW があり、属性を使用してアクション トランザクションをマークします (私の場合は、監査と組み合わせました)。それらの残りの部分が本当に複雑な場合は、おそらくそれらをラップするアプリケーション サービスが必要です。

ちょっとした考え。私は真の初心者です。

于 2013-03-09T19:42:44.483 に答える
1

David Ebbo Solution への追加、これは

別の解決策:

次のようなデフォルトのコンストラクターをベースコントローラーに追加しました。

protected BaseController(){}

これで問題なく動作します (サブクラスで CodeRush の「ベース型コンストラクターが実装されていません」という問題は発生しません)。

于 2013-03-10T09:46:27.647 に答える