Если вы собираете Ninject.Web.Mvc из исходного кода, включите копию класса HttpHandlerBase из Ninject.Web в пространство имен Ninject.Web.Mvc.
В противном случае ваш собственный HttpHandlerBase должен будет вызвать Kernel.Inject
на себя.Ссылка на ядро может быть получена через область приложения или с помощью отражения.
В HttpApplication.CreateKernel()
сохраните экземпляр ядра в области приложения как «NinjectKernel».Затем добавьте следующее в качестве базового класса IHttpHandler.
public abstract class HttpHandlerBase : IHttpHandler
{
public abstract void ProcessRequest( HttpContext context );
void IHttpHandler.ProcessRequest( HttpContext context )
{
var kernel = (IKernel) context.Application["NinjectKernel"];
kernel.Inject( this );
this.ProcessRequest( context );
}
}
Подход отражения не требует никакого кода в вашем HttpApplication.
public abstract class HttpHandlerBase : IHttpHandler
{
public abstract void ProcessRequest( HttpContext context );
void IHttpHandler.ProcessRequest( HttpContext context )
{
Assembly ass = Assembly.Load("Ninject.Web.Mvc");
Type type = ass.GetType("Ninject.Web.Mvc.KernelContainer");
MethodInfo init = type.GetMethod("Inject", BindingFlags.Static | BindingFlags.Public, null, new Type[] { typeof(object) }, null );
init.Invoke( null, new object[] {} );
this.ProcessRequest( context );
}
}