我是一个使用Ninject的新手,我无法弄清楚如何注入我的通用http处理程序.我有一个MVC3项目,我将我的服务注入到控制器中,没有任何问题.这是我在Ninject App_start类中用于注册服务的内容:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<NLSubscriber.Core.Service.Repository.INLUserRepository>().To<NLSubscriber.Core.Service.Repository.EFDAL.EFNLUserRepository>().InRequestScope();
kernel.Bind<Neticon.Mvc.Helpers.IConfigHelper>().To<Neticon.Mvc.Helpers.AzureEnabledConfigHelper>().InSingletonScope();
kernel.Bind<Neticon.Security.Service.IAuthenticationService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateAuthenticationService()).InRequestScope();
kernel.Bind<Neticon.Security.Service.IMembershipService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateMembershipService()).InRequestScope();
kernel.Bind<Neticon.Security.Service.IRoleManagerService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateRoleManagerService()).InRequestScope();
Run Code Online (Sandbox Code Playgroud)
当我尝试通过使用属性注入(使用[inject]属性)从我的泛型处理程序获取一些服务时,我总是得到null.这是我的处理程序的样子:
public class SubscriberHandler : IHttpHandler
{
[Inject]
public INLUserRepository userRep { get; set;}
public void ProcessRequest(HttpContext context)
{
var users = userRep.GetUsers(); //userRep is always null here
}
public bool IsReusable
{
get
{
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过这样做:
readonly INLUserRepository userRep;
public SubscriberHandler()
{
using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
{
userRep = kernel.Get<INLUserRepository>();
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:"加载Ninject组件ICache时出错.在内核的组件容器中没有注册这样的组件.建议:1)如果你为KernelBase创建了一个自定义子类,请确保你已经正确实现了AddComponents( …