加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 使用Ninject返回null的HttpHandler属性注入

发布时间:2020-12-16 00:01:23 所属栏目:asp.Net 来源:网络整理
导读:我有以下httphandler: public class NewHandler : IHttpHandler{ [Inject] public IFile FileReader { get; set; } public NewHandler() { } public void ProcessRequest(System.Web.HttpContext context) { .... var something = SomeMethod(FileReader);
我有以下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;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读