我是一個使用Ninject的新手,我無法弄清楚如何注入到我的通用http處理程序中。我有一個MVC3項目,我將我的服務注入到控制器中,完全沒有問題。 這是我在我的Ninject App_start類得到了註冊服務:如何使用Ninject注入一些通用的asp.net http處理程序?
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();
當我嘗試通過使用屬性注入(與[注]屬性),我總是得到空從我的通用處理器得到一些服務。這是我的處理程序看起來像:
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;
}
}
}
我自己也嘗試做這樣的:
readonly INLUserRepository userRep;
public SubscriberHandler()
{
using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
{
userRep = kernel.Get<INLUserRepository>();
}
}
,但我發現了異常:「錯誤加載Ninject組件icache中沒有這樣的組件有已經登記在內核組件容器 建議: 1)如果你已經創建了KernelBase自定義子類,請確保您有正確 實施AddComponents()方法 2)確保你沒有從刪除的組件。容器通過呼叫移除所有()。 3)確保你不小心創建多個內核。」
這是暗示我,我不應該在我的應用程序創建一個以上的內核,對吧? 我在做什麼錯? 感謝
可能的重複http://stackoverflow.com/questions/3629472/httphandler-property-injection-using-ninject-returning-null – Andreas