根据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/