2011-07-24 12 views
4

私のASP.NET MVC 3アプリケーションは、NinjectとNinject ASP.NET MVC 3の統合を使用します。私はCreateKernelメソッドをオーバーロードしています。要求ごとにNinjectレジスタ

今、私はこのように、クエリごとにいくつかの依存関係を設定する必要があります。

if (Language == Language.English) 
    //register English language implementations 
else if (Language == Language.Russian) 
    //register Russain language implementations 

私はGlobal_asaxのリクエスト固有のメソッドのいくつかはのための素晴らしい場所でしょうthougtし、登録するNinjectHttpApplicatonプロパティの一部にアクセスしようとしました要求ごとの依存関係私はKernelにアクセスし、 "Ninjectをサービスロケータとして使用しないでください"という警告を廃止しました。私は間違って何をしていますか?どのようにそれを正しく行うには?

答えて

5

言語などの条件に基づいて実装を変更するには、条件付きバインドを使用する必要があります。例えば。 Bind<IFoo>().To<Foo>().When(ctx => Language == Language.English)

+0

あなたが正しいです、私はこの方法でCreateKernelで自分の依存関係を登録できます。しかし、カスタムラムダスコープを作成する代わりに、InRequestScopeを登録することをお勧めします。 – SiberianGuy

+1

条件がスコープではありません。これは単にバインディングが適用されるときを定義します。あなたはまだInRequestScope –

+0

私は理解して使用することができます。しかし、私は(一度)言語(または他のクエリ固有の条件)を動的に計算し、それに対するすべての依存関係を設定したいと思います。 – SiberianGuy

関連する問題