[英]MVC3 Controller constructor + Ninject
我正在研究MVC3 Web應用程序,並與Ninject發生了新的問題。
我在我的控制器中使用以下代碼:
public class TestController : Controller
{
public IRepository<CustomerModel> rep;
public TestController(IRepository<CustomerModel> repository)
{
this.rep = repository;
}
public ActionResult Index()
{
return View();
}
}
和我的Ninject模塊:
public class RepositoryModule : NinjectModule
{
public override void Load()
{
Bind(typeof(IRepository<>)).To(typeof(Repository<>));
}
}
但是這只會引發“System.MissingMethodException:沒有為此對象定義的無參數構造函數”。 當我嘗試渲染索引視圖時。
如果我然后添加:
public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }
所以我的實際TestController看起來像:
public class TestController : Controller
{
public IRepository<CustomerModel> rep;
public TestController() : this(new Repository<CustomerModel>(new XenCRMEntities())) { }
public TestController(IRepository<CustomerModel> repository)
{
this.rep = repository;
}
public ActionResult Index()
{
return View();
}
}
它可以工作,但正如你所看到的那樣,新的構造函數幾乎打破了IoC的全部要點。
我該如何解決?
提前致謝。
一個簡短的測試表明,MVC3擴展中的泛型綁定沒有問題。 我猜這個問題不在Controller中,但是由於它有一些未知的依賴項,因此無法創建Repository。
但是這使我每次更改依賴項解析器以顯示Ninject堆棧跟蹤,只要可以解析所請求的類型,但其依賴關系之一無法解析。 更新到構建服務器上的最新版本以獲得更好的堆棧跟蹤。
您將需要更改控制器工廠,因為常規MVC控制器工廠不執行DI。
您可以在這里查看有關如何設置MVC + Ninject的更多信息: MVC3 + Ninject - 如何?
事實證明,它不是控制器搞砸了,但Ninject沒有正確綁定我的通用存儲庫和IRepository - 因此我創建了一個新帖子: Ninject + Bind通用存儲庫
不要使用這個綁定!
綁定(typeof運算(IRepository <>))向(typeof運算(存儲庫<>))。
我改變了我的代碼使用這個綁定和服務器崩潰,它適用於一個用戶,但對於數千個請求它真的很糟糕
采用
Bind(typeof(IRepository<IClass>)).To(typeof(Repository<Class>))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.