【发布时间】:2010-11-18 07:17:26
【问题描述】:
如果这里已经有类似的问题,请原谅我,但我找不到。
无论如何,我有一个使用 Ninject 2 作为 DI 的 ASP.NET MVC 2 应用程序。我将控制器上的构造函数设置为没有参数,这意味着它们必须实例化所需的Providers。当我有 Providers 具有自己的依赖项(例如 Repositories)时,问题就出现了,它们还具有自己的依赖项,例如 DataContext。
所以,我很好奇我是否可以 A) 从 Ninject 中获取对象,例如 DataContext 并将其传递到我将要创建的极长的实例链中,或者 B ) 让 Ninject 构造我需要传入的对象?
我在 Ninject Wiki 上四处寻找,但找不到令人满意的答案。另外,我几乎没有任何使用 Ninject 的经验,所以请把我当作这方面的菜鸟。
无论如何,提前谢谢!
附:不确定这是否重要,但我这样做是因为“No parameterless constructor defined for this object.”突然出现并破坏了我的应用程序。我不知道是什么原因突然造成的,但是在没有“无参数构造函数”和 Ninject 做它的事情的情况下,应用程序运行良好。如果有人对解决此问题并避免上述所有其他事情有任何建议,我都是你的。
更新(参考@JC)
好吧,我确定我是从 NinjectHttpApplication 继承的,然后我在 Global.asax 中这样做:
protected override IKernel CreateKernel() {
var Kernel = new StandardKernel();
Kernel.Bind<DataContext>().ToSelf().InSingletonScope();
return (Kernel);
}
我没有在这里绑定任何存储库或服务,因为我没有使用接口,因为应用程序在没有 DI 或存储库的情况下诞生,但上周收到了升级。坦率地说,如果我想连接所有东西,我是 50/50,但这不是重点。
我要强调的是,这在一个半星期内运行良好(减去我纠正的错误),它只是突然停止了。我得到了上面的异常所说的内容,但是直到现在,在没有“无参数构造函数”的情况下,应用程序都可以正常工作。我什至不确定是控制器造成的。在整个过程中被实例化的类是否可以成为原因,但是由于控制器触发了处理,因此它被归咎于异常(我只是指说控制器是原因的堆栈跟踪)?
【问题讨论】:
-
您是在应用程序中设置了 Ninject MVC 还是仅设置了 Ninject? (github.com/ninject/ninject.web.mvc)
-
我很确定 MVC 版本,因为 Global.asax 中的 MvcApplication 继承自 NinjectHttpApplication。
标签: c# asp.net-mvc dependency-injection ninject