0

ユーザー情報 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());
}
4

1 に答える 1