我目前正在开发 MVC3 Web 应用程序,遇到了 Ninject 的新问题。
我在我的 Controller 中使用以下代码:
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:没有为此对象定义的无参数构造函数”。当我尝试呈现索引 View 时。
如果我再添加:
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 扩展中的泛型绑定(bind)没有问题。我猜问题不在 Controller 中,而是无法创建存储库,因为它有一些未知的依赖项。
但是这让我稍微更改了依赖项解析器,以便在请求的类型可以解析但其中一个依赖项无法解析时显示 Ninject 堆栈跟踪。在构建服务器上更新到最新版本以获得更好的堆栈跟踪。
关于c# - MVC3 Controller 构造函数 + Ninject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369086/