2009-07-13 3 views
7

私は結果のためにTのIEnumerableを取得できるように、型指定したISearchableインターフェイスを作成しました。Unity Container - TをResolveメソッドに動的に渡す

私は別のドメインオブジェクトのためのISearchableを実装するサービスの数を持っている...

Container.RegisterType<ISearchable<Animal>, AnimalService>(); 
Container.RegisterType<ISearchable<Fish>, FishService>(); 

私は(ユニティ経由)を解決したいISearchableタイプに基づいていますが、それは仕事を得るのに苦労しています...

次のコードはコンパイルしませんが、私が達成しようとしていることのアイデアが得られます。

Type t = typeof(Animal); 
var searchProvider = _container.Resolve<ISearchable<t>>(); 

感謝の気持ちで助けられました!

おかげで、

アンディ

答えて

12

最後にソートしてください。うまくいけば、誰かに助けになるでしょう!

var type = filter.GetType(); 
var genericType = typeof(ISearchable<>).MakeGenericType(type); 
var searchProvider = _unityContainer.Resolve(genericType); 
0

名前を単純にタイプの完全な名前にすることができますか、他のものを使用することができます。ドミトリーのアプローチもうまくいくでしょう。しかし、これによりコードが明確になるかもしれません。

+0

ドミトリーのおかげで、強く型付けされたソリューションを望んでいますが、そこに1つがあれば! :) –

2

var sp = container.Resolve(
Type.GetType("ISearchable`1[" + yourGenericTypeHere + "]")); 
...についての名前であなたのタイプを登録し、そのように解決しないのはなぜどのように
+0

しかし、私はまだ解決メソッドに動的にTを取得する必要があるだろう... –

関連する問題