我有以下 httphandler:
public class NewHandler : IHttpHandler
{
[Inject]
public IFile FileReader
{
get;
set;
}
public NewHandler()
{
}
public void ProcessRequest(System.Web.HttpContext context)
{
....
var something = SomeMethod(FileReader);
....
}
public bool IsReusable
{
get
{
return true;
}
}
}
这是我在 Global.asax 中的 Ninject 模块。
internal class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<IFile>().To<FileWrapper>().InSingletonScope();
}
}
每次处理程序触发时,FileReader 都是 NULL。我错过了什么吗?这是使用 Ninject 进行属性注入(inject)的正确方法吗?
谢谢
最佳答案
这是使用 Ninject 进行属性注入(inject)的正确方法,但它不起作用。您可能正在使用类似 NinjectMvcApplication 类作为应用程序的基类,它处理 Controller 的依赖项注入(inject)以及 Controller 可能使用的所有内容(服务、存储库)。但是 HttpHandler 不是由 ControllerFactory
实例化的,因此没有任何东西负责注入(inject)东西。
也许有更好的方法来做到这一点,但我使用服务定位器来解决依赖性。请参阅http://code.dortikum.net/2010/08/05/asp-net-mvc-di-with-common-service-locator-and-ninject/ .
更新:
尝试这样的事情:
public class NewHandler : IHttpHandler
{
private readonly IFile _fileReader;
public NewHandler()
{
_fileReader = ServiceLocator.Current.GetInstance<IFile>();
}
public void ProcessRequest(System.Web.HttpContext context)
{
....
var something = SomeMethod(_fileReader);
....
}
public bool IsReusable
{
get
{
return true;
}
}
}
关于asp.net-mvc-2 - 使用 Ninject 的 HttpHandler 属性注入(inject)返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629472/