4

私はCastle Windsor(バージョン3.0 RC1)に流暢登録技術を使用して登録したいサービスのコレクションを持っています。Castle Windsor Fluent Configuration:具体的な実装をせずに、特定のサービスに特定のライフスタイルを適用することは可能ですか?

私は一時的なライフスタイルと私はシングルトンになりたい1つを使用するための特定の一つを除いて、それらのすべてをしたいので、私はこれを行う:

container.Register(AllTypes 
         .FromThisAssembly() 
         .InSameNamespaceAs<IMyService>() 
         .WithServiceDefaultInterfaces() 
         .ConfigureIf(s => s.Implementation == typeof(MyService), 
            s => s.LifestyleSingleton(), 
            s => s.LifestyleTransient())); 

私はそれを持っている問題は、I ConfigureIfの最初のパラメータでtypeof(MyService)を使用していますが、私が使用することができればそれを好むでしょうIMyServiceシングルトンであるかどうかを判断するには(つまり、シングルトンになる)。それはどういうわけか可能ですか?この質問を見て提案oleksiiに多くのおかげで

+1

おそらくこれが助けることができますか? [特定のジェネリックインターフェイスタイプを実装するかどうかを判断する方法](http://stackoverflow.com/questions/503263/how-to-determine-if-a-type-implements-a-specific-generic-interface-type ) – oleksii

+0

ありがとうございました!私は最初のパラメータをs => typeof(IMyService).IsAssignableFrom(s.Implementation)に変更し、うまくいきました。 – kmp

+0

クール、あなたはそれを回答として投稿し、それを受け入れることができますか? – oleksii

答えて

4

:質問のコメントでHow to determine if a type implements a specific generic interface type、これに対する答えは、次の操作を実行することです:

container.Register(AllTypes 
        .FromThisAssembly() 
        .InSameNamespaceAs<IMyService>() 
        .WithServiceDefaultInterfaces() 
        .ConfigureIf(s => typeof(IMyService).IsAssignableFrom(s.Implementation), 
           s => s.LifestyleSingleton(), 
           s => s.LifestyleTransient()));