我创建了一个我输入的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>>();
任何帮助都感激不尽!
谢谢,
安迪
答案 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 + "]"));