Unity容器 - 动态传递给Resolve方法

时间:2009-07-13 16:08:53

标签: c# inversion-of-control unity-container ioc-container

我创建了一个我输入的ISearchable接口,以便我可以检索结果的IEnumerable of T.

我有许多服务可以为不同的域对象实现ISearchable ......

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

我想通过Unity解决基于类型的ISearchable,但我正在努力让它发挥作用......

以下dos不能编译,但希望能够了解我正在努力实现的目标。

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

任何帮助都感激不尽!

谢谢,

安迪

3 个答案:

答案 0 :(得分:12)

最后对它进行了排序,希望这对其他人有帮助!

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

答案 1 :(得分:2)

为什么不按名称注册您的类型并以此方式解决?

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

Container.Resolve(ITelescopeView, "type1");

如果您希望您的名字可以只是该类型的全名,或者您可以使用其他名称。德米特里的方法也会奏效。但这可能会产生更清晰的代码。

答案 2 :(得分:0)

怎么样......

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