根据this tutorial的说法,要在我的Asp.net MVC 3应用程序中使用Ninject,我要做的就是通过Nuget安装软件包并配置依赖项。

按着这些次序



中NinjectMVC3.cs

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

中 Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
    var myObject = DependencyResolver.Current.GetService<IReCaptchaValidator>(); //always null
}
myObject始终返回null。

我已经尝试过kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>().InRequestScope(),但是没有效果!
myObject 继续为空

在StackOverflow上的this post中,有人告诉我使用DependencyResolver.Current.GetService(TYPE)检索对象的实例。

最佳答案

在您引用的帖子中,没有告诉您使用DependencyResolver,只是可以使用它。您不应该使用它,因为它是众所周知的反模式。

虽然直接使用DependencyResolver应该可以工作,但您实际上不应该那样做。

相反,您应该使用构造函数注入(inject),这将使您的类将类型作为构造函数的参数。

public class MyController : Controller {
    IReCaptchaValidator _validator;

    public MyController(IReCaptchaValidator validator)
    {
        _validator = validator;
    }
}

然后,在您的方法中:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
    var myObject = _validator;
}

关于c# - DependencyResolver.Current.GetService始终返回null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7719953/

10-12 00:13