1

ninject を使用してリポジトリを注入しています。基本クラスを継承したいのですが、コンストラクターがあるためできません。

ベースコントローラー:

namespace Orcha.Web.Controllers
{
    public class BaseController : Controller
    {
        public IRepository<string> db;

        public BaseController(Repository<string> db){
            this.db = db;
            Debug.WriteLine("Repository True");
        }
    }
}

継承のあるコントローラー: エラー 'BaseController' には、0 引数を取るコンストラクターが含まれていません HomeController.cs

public class HomeController : BaseController
{

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
4

1 に答える 1

5

C# では、基本クラスに既定のコンストラクターがない場合、派生クラスにコンストラクターを追加する必要があります。例えば

public class HomeController : BaseController
{
    public HomeController(IRepository<string> db) : base(db) { }

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}

必要なバインディングがある場合、依存関係は Ninject によって提供されます。

Bind<IRepository<string>>().To<Repository<string>();

BaseController は具体的なリポジトリではなく、インターフェイスを取る必要があります。

public class BaseController : Controller
{
    public IRepository<string> db;

    public BaseController(IRepository<string> db){
        this.db = db;
        Debug.WriteLine("Repository True");
    }
}
于 2012-08-10T11:11:22.877 に答える