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

标签 asp.net-mvc-2 ninject ninject-2

我有以下 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/

相关文章:

.net - 如何配置 Automapper 以注入(inject) Ninject 2.0?

asp.net-mvc-2 - 如何在 Ninject 中为 MVC 中的 ValidationAttribute 进行属性注入(inject)?

silverlight - 我应该制作一个纯 Silverlight 的社交网站还是使用 ASP.NET MVC?

c# - 对于每个请求,我所有注入(inject)的 Controller 的构造函数都被命中 4 次

asp.net-mvc - LabelFor 和 TextBoxFor 不会生成相同的 id

Ninject 不在 WCF 中使用构造函数参数创建新实例

c# - 拦截 Ninject 实例激活?

visual-studio-2010 - 如何在 VS2010 Ultimate 中重新安装 MVC2?

c# - 使用名称来区分使用 IoC 的实例

c# - 构造函数注入(inject)应用程序架构是错误的 - Ninject