rid*_*nsb 8 c# dependency-injection ninject asp.net-mvc-3
根据本教程,要在我的Asp.net MVC 3应用程序中使用Ninject,我所要做的就是通过Nuget安装包并配置依赖项.
安装Package-Ninject.MVC3
在NinjectMVC3.cs中
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>();
}
Run Code Online (Sandbox Code Playgroud)
在控制器中
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
var myObject = DependencyResolver.Current.GetService<IReCaptchaValidator>(); //always null
}
Run Code Online (Sandbox Code Playgroud)
myObject 始终返回null.
我试过了kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>().InRequestScope(),但效果不好!
myObject 继续为空
在这篇关于StackOverflow的帖子中,我被告知要DependencyResolver.Current.GetService(TYPE)用来检索对象的实例.
在你引用的帖子中,你没有被告知使用DependencyResolver,只是可以使用它.你不应该使用它,因为它是一个众所周知的反模式.
虽然直接使用DependencyResolver应该可行,但你真的不应该这样做.
相反,您应该使用构造函数注入,这将使您的类将类型作为构造函数的参数.
public class MyController : Controller {
IReCaptchaValidator _validator;
public MyController(IReCaptchaValidator validator)
{
_validator = validator;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的方法中:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
var myObject = _validator;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15310 次 |
| 最近记录: |