2009-07-13 72 views
7

我創建了一個我已經鍵入的ISearchable接口,以便可以檢索結果的T的IEnumerable。Unity容器 - 將T動態傳遞給Resolve方法

我有很多實現ISearchable不同的域對象的服務...

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

我想基於該類型來解決(通過統一)的ISearchable,但我在努力得到它的工作...

下面的dosn't編譯,但希望能給出我想要實現的想法。

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

......怎麼

var sp = container.Resolve(
Type.GetType("ISearchable`1[" + yourGenericTypeHere + "]")); 
+0

感謝那德米特里,雖然我希望有一個強類型的解決方案 - 如果有一個! :) – 2009-07-13 16:56:01

2

爲什麼叫不上名字註冊類型和解決呀?

Container.RegisterType<ITelescopeView, TelescopeView>("type1"); 
Container.RegisterType<ITelescopeView, TelescopeView2>("type2"); 

Container.Resolve(ITelescopeView, "type1"); 

如果你想讓你的名字可以簡單地是類型的全名或者你可以使用別的東西。德米特里的方法也會起作用。但是這可能會導致代碼更清晰。

+0

但我仍然需要動態地將T轉換爲解析方法... – 2009-07-13 16:50:22