使用Ninject获取对象的实例

rid*_*nsb 21 dependency-injection ninject asp.net-mvc-3

我通过Nuget 在我的项目Ninject.MVC3上安装了.

我读到这篇文章,为了在我的控制器中注入依赖项,你所要做的就是安装Ninject,在NinjectMVC3.cs中添加我的依赖项并准备就绪.

到目前为止这么好,但如何检索对象的实例?

public ActionResult MyAction()
{
    var myObject = /* HERE  ??*/
}
Run Code Online (Sandbox Code Playgroud)

在控制器的构造函数中我没有问题!

public class AccountController : Controller
{
    public AccountController(IRepository repository) { ... } //This works!!
}
Run Code Online (Sandbox Code Playgroud)

Bui*_*ted 35

它起作用的原因是因为ControllerFactory查找DI并自动添加它.如果要获取特定实例,可以执行以下操作:

private static void RegisterServices(IKernel kernel) {
    kernel.Bind<ICoolObject>().To(CoolObject);
}

public ActionResult MyAction() {
    var myObject = 
        System.Web.Mvc.DependencyResolver.Current.GetService(typeof (ICoolObject));
}
Run Code Online (Sandbox Code Playgroud)

虽然很棒.对于依赖注入新手(包括我自己)的人来说,这种情况经常发生.问题是为什么你需要这样做?

  • 我把它剪掉了,因为这是我答案中的代码.`System.Web.Mvc.DependencyResolver.Current`为您提供当前的Ninject内核.然后为要解析的特定类型调用`GetService`. (2认同)