0

重複の可能性:
Ninject を使用してリポジトリをカスタム メンバーシップ プロバイダーに注入する

私はこのトピックについてあまりにも多くを検索しましたが、最も近い答えはここでした MVC 3 ninject カスタム メンバーシップ コンテキストによって破棄されたエラー ですが、アプリケーションにあるすべての詳細についてはわかりませんが、ドメインには私のエンティティとリポジトリの抽象化が含まれていますこのようにNinjectバインディングを使用すると、実装はすべて正常に機能します

 public class NinjectControllerFactory : DefaultControllerFactory{
    readonly IKernel _kernel;


    public NinjectControllerFactory(){
        _kernel=new StandardKernel();
        AddBindings();
    }


    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType){
        return controllerType == null
            ? null
            : (IController) _kernel.Get(controllerType);
    }
 void AddBindings(){
        _kernel.Bind<IٍSomeRepository>()
            .To<EFSomeRepository>();

しかし、これについて読んだカスタマーメンバーシッププロバイダーをバインドする方法がわかりません。これは、ポパティを介して注入する必要がありますが、方法がわかりません。アイデアはありますか?

4

1 に答える 1

0

まず、独自のコントローラーファクトリではなく、Ninject.MVC3を使用する必要があります。Ninject.MVC3はすべての接続を処理します。必要なのは、App_Start\NinjectWebCommon.csにマッピングを提供することだけです。

次に、カスタムメンバーシッププロバイダーを使用している場合を除き、NinjectforMembershipを使用する必要はありません。それでも、NinjectとMembershipを混在させなければ、それほど苦痛はありません。自分が何をしているのかを本当に理解していない限り、気にしないことをお勧めします。

問題は、Membershipが静的クラスであり、MembershipProviderの静的インスタンスを作成することです。これは、リクエストの終了時に破棄されないことを意味します。これを回避する方法はいくつかありますが、一般的には、DIで機能させるよりも、メンバーシップをそのまま使用する方がはるかに簡単です。

リンクした質問は、カスタムメンバーシッププロバイダーへのビジネスロジックの挿入に関連する特定の問題を解決します。これを行う必要がある場合は、それが良い選択かもしれません。ただし、ほとんどのカスタムメンバーシッププロバイダーは非常に単純な傾向があることがわかりました。

于 2012-04-30T21:49:33.993 に答える