2009-07-13 22 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

相关问题