我有以下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; } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。