2012-08-09 7 views
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(); 
    } 
} 

답변

5

C# .NET을 사용하는 생성자를 포함하지 않는이 요구하는 기지의 경우 클래스는 파생 클래스에 생성자를 추가해야하는 것보다 기본 생성자가 없습니다. 예 : 당신은 바인딩 필요한 경우

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"); 
    } 
} 
+0

그런 종류의 것 같습니다. 저장소의 요점은 모든 컨트롤러에 IRepository를 넣을 필요가 없다는 것입니다. –