【发布时间】:2011-05-21 02:59:06
【问题描述】:
我目前正在开发一个 MVC3 Web 应用程序,并遇到了 Ninject 的一个新问题。
我在控制器中使用以下代码:
public class TestController : Controller
{
public IRepository<CustomerModel> rep;
public TestController(IRepository<CustomerModel> repository)
{
this.rep = repository;
}
public ActionResult Index()
{
return View();
}
}
还有我的忍者模块:
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 的全部要点。
我该如何解决这个问题?
提前致谢。
【问题讨论】:
-
你使用的是什么控制器工厂实现?
-
我只是在使用常规的 MVC 控制器工厂实现。我读到您可以创建一个自定义控制器工厂来解决此问题,但是我只能找到人们使用 Structuremap 的示例...
标签: c# asp.net-mvc ioc-container ninject