我有以下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进行属性注入的正确方法吗?
谢谢
解决方法
这是使用Ninject进行属性注入的正确方法,但它不起作用.您可能正在使用类似NinjectMvcApplication类的东西作为应用程序的基类,它处理控制器的依赖注入以及控制器可能使用的所有内容(服务,存储库).但是HttpHandlers没有被ControllerFactory实例化,因此没有任何东西可以处理注入事情.
也许有更好的方法,但我使用服务定位器来解决依赖.见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; } } }