2013-11-13 5 views
1

Я пытаюсь ввести службу в HttpHandler, который я написал. Но все, что я получаю, - это Служба с нулевым значением.NInjecting в asp.net сайт 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, но когда Я меня e, что я просто получаю пустой ответ назад, и он никогда не попадает в 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; } } 
} 

ответ

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; } } 
}