DependencyResolver.Current.GetService总是返回null

本文关键字:返回 null Current GetService DependencyResolver | 更新日期: 2023-09-27 18:10:49

根据本教程,要在Asp.net MVC 3应用程序中使用Ninject,我所要做的就是通过Nuget安装包并配置依赖项。

执行以下步骤

安装Package-Ninject。MVC3

在<<p> strong> NinjectMVC3.cs
private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>();
}
控制器在<<p> strong>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
    var myObject = DependencyResolver.Current.GetService<IReCaptchaValidator>(); //always null
}

myObject总是返回null。

我试过kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>().InRequestScope(),但没有效果!

myObject 继续null

在StackOverflow上的这篇文章中,我被告知使用DependencyResolver.Current.GetService(TYPE)来检索对象的实例。

DependencyResolver.Current.GetService总是返回null

在你提到的帖子中,你没有被告知要使用DependencyResolver,只是有可能使用它。你不应该使用它,因为它是一个众所周知的反模式。

虽然直接使用DependencyResolver应该可以工作,但你真的不应该这样做。

相反,你应该使用构造函数注入,这将使你的类接受类型作为构造函数的参数。

public class MyController : Controller {
    IReCaptchaValidator _validator;
    public MyController(IReCaptchaValidator validator)
    {
        _validator = validator;
    }
}

然后,在你的方法:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult Registe(RegisterModel model)  
{  
    var myObject = _validator;
}  

我也遇到了同样的问题。在同一个函数上,我可以很好地解析一个接口,而另一个接口不能解析。他们都是注册过的!

手动解决时,似乎没有得到错误!很有趣,但我刚发现!

一旦我在控制器构造函数中注入接口并启用所有异常,然后我得到一个异常,说没有公共构造函数用于我的实现!

试一试,你很可能会找到根本原因。