3

ninject初期化コードのRegisterServicesでMembership.Providerを構成する方法を知っている人はいますか?

私のコードでは:

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        // Put additional bindings here
        kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>();
        kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
        kernel.Bind<IUserRepository>().To<UserRepository>();
        kernel.Bind<IRoleRepository>().To<RoleRepository>();
        kernel.Bind<ISecurityService>().To<SecurityService>();
        kernel.Inject(Membership.Provider);
        kernel.Inject(Roles.Provider);
    }

kernel.Inject行を除いて、すべてのモジュールがバインドされます。「アプリケーションの開始前の初期化段階では、このメソッドを呼び出すことはできません」というエラーが表示されます。

このファイルは、標準のnugetninject.mvcインストールのNinjectWebCommonです。カスタムメンバーシッププロバイダーを作成し、プロバイダーにサービスレイヤー(SecurityService)を挿入しようとしています。

何か助けはありますか?

4

1 に答える 1

2

私はこれと同じ問題で壁に頭をぶつけました、私はついにここで比較的きれいな解決策を見つけました。

基本的なアプローチは次のとおりです。

  1. [Inject]カスタムメンバーシッププロバイダークラスの依存関係プロパティで属性を使用します。

  2. httpモジュールを作成して、プロバイダーをすぐに解決/注入します(Ninject 3はHttpModuleの注入をサポートしています)。

  3. メソッド内の最後の2つのinjectステートメントRegisterServices()を、プロバイダーと新しいHttpModuleのバインディングに置き換えます。

    kernel.Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider); kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();

于 2012-07-08T14:24:35.760 に答える