7

我创建了一个我已经键入的 ISearchable 接口,以便我可以检索 T 的 IEnumerable 作为结果。

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

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

我想(通过 Unity)解决基于类型的 ISearchable ,但我正在努力让它工作......

以下内容无法编译,但希望能对我想要实现的目标有所了解。

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

任何帮助都感激不尽!

谢谢,

安迪

4

3 回答 3

12

终于整理出来了,希望对大家有帮助!

var type = filter.GetType();
var genericType = typeof(ISearchable<>).MakeGenericType(type);
var searchProvider = _unityContainer.Resolve(genericType);
于 2009-07-15T08:18:37.427 回答
2

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

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

Container.Resolve(ITelescopeView, "type1");

如果您希望您的名称可以简单地是类型的全名,或者您可以使用其他名称。德米特里的方法也将奏效。但这可能会导致更清晰的代码。

于 2009-07-13T16:21:23.257 回答
0

怎么样...

var sp = container.Resolve(
Type.GetType("ISearchable`1[" + yourGenericTypeHere + "]"));
于 2009-07-13T16:17:04.983 回答