1

私が書いた HttpHandler にサービスを注入しようとしています。しかし、私が得ているのは、null 値を持つ Service だけです。

通常のasp.net Webサイトを使用して問題を説明する小さな例を作成しました。

 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

記録のために、これは HttpHandlerBase を使用する場合の MyHandler の外観です。

 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 に答える