1

我正在尝试将服务注入到我编写的 HttpHandler 中。但我得到的只是一个具有空值的服务。

我创建了一个小例子来说明我使用普通 asp.net 网站的问题。

 public class MyHandler :IHttpHandler
{
    [Inject]
    public IHelloService HelloService { get; set; }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write(HelloService.Hello());
    }

    public bool IsReusable { get; private set; }
}

服务

 public interface IHelloService
{
    string Hello();
}

public class HelloService : IHelloService
{
    public string Hello()
    {
        return string.Format("Hello, the time is now {0}", DateTime.Now.ToShortTimeString());
    }
}

NinjectWebCommon.cs

private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IHelloService>().To<HelloService>();
    }     

最后是我的 web.config

<httpHandlers>
   <add verb="*" path="*.aspx" type="HttpHandlerTest.App_Code.MyHandler" />
</httpHandlers>

我可以看到有一个Ninject.Web.HttpHandlerBase,但是当我使用它时,我简单地得到一个空响应,它永远不会命中ProcessRequest

仅作记录,这是 MyHandler 在使用 HttpHandlerBase 时的样子

 public class MyHandler :Ninject.Web.HttpHandlerBase
{
    [Inject]
    public IHelloService HelloService { get; set; }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write(HelloService.Hello());
    }

    protected override void DoProcessRequest(HttpContext context)
    {

    }

    public override bool IsReusable { get { return true; } }
}
4

1 回答 1

3

找到了使其工作的解决方案。将 Myhandler.cs 修改为此。

 public class MyHandler : Ninject.Web.HttpHandlerBase
{
    [Inject]
    public IHelloService HelloService { get; set; }

    protected override void DoProcessRequest(HttpContext context)
    {
        context.Response.Write(HelloService.Hello());
    }

    public override bool IsReusable { get { return true; } }
}
于 2013-11-14T20:33:50.193 回答