私は 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();
プロパティ注入 ([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;
}
}
}
私も次のようにしてみました:
readonly INLUserRepository userRep;
public SubscriberHandler()
{
using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
{
userRep = kernel.Get<INLUserRepository>();
}
}
「Ninject コンポーネント ICache のロード中にエラーが発生しました。カーネルのコンポーネント コンテナーにそのようなコンポーネントは登録されていません。提案: 1) KernelBase のカスタム サブクラスを作成した場合は、AddComponents( ) メソッド。2) RemoveAll() の呼び出しによってコンテナーからコンポーネントを削除していないことを確認してください。3) 誤って複数のカーネルを作成していないことを確認してください。」
これは、アプリケーションで複数のカーネルをインスタンス化してはならないことを示唆していますよね? 私は何を間違っていますか?ありがとう