ユーザー情報 IAccountCore にアクセスするために使用するリポジトリがあり、同様に実装したカスタム メンバーシップ プロバイダーがあります。メンバーシップ プロバイダーでプロパティ インジェクションを設定していますが、インジェクションされていないようです。私はネット上のすべての例を役に立たなかった。
起動後のメソッドで ninject ブートストラップ + Web アクティベーターが kernel.Inject(Membership.Provider) を起動していますが、プロパティは常に null です。以下にいくつかのコード スニペットを示します。
WebApi のブートストラップ
[assembly: WebActivator.PostApplicationStartMethod(typeof(API.App_Start.NinjectWebCommon), "RegisterMembership")]
上から呼び出されるメソッド:
public static void RegisterMembership()
{
//bootstrapper.Kernel.Inject(Membership.Provider);
bootstrapper.Kernel.Load(new MembershipNinjectModule());
}
Ninject モジュール (別のアセンブリ/プロジェクト内):
public class MembershipNinjectModule : NinjectModule
{
/// <summary>
/// Loads the module into the kernel.
/// </summary>
public override void Load()
{
var kernel = Kernel;
kernel.Inject(Membership.Provider);
}
}
カスタム メンバーシップ プロバイダーのプロパティ:
[Inject]
public IAccountCore AccountCore {get;set;}
別の ninject モジュールのバインディング:
public class NinjectConfigurator : NinjectModule
{
public override void Load()
{
var kernel = Kernel
kernel.Bind<IAccountCore>().To<AccountCore>().InTransientScope();
}
}
Ninject ブート ストラップで上記のモジュールをロードするコード:
private static void RegisterServices(IKernel kernel)
{
kernel.Load(new NinjectConfigurator());
}