【发布时间】:2018-05-26 12:13:23
【问题描述】:
我想创建一个返回类型(或 IEnumerable 类型)的方法,该类型实现采用类型参数的特定接口——但是我想通过该泛型类型参数本身进行搜索。这更容易举例说明:
我想要的方法签名:
public IEnumerable<Type> GetByInterfaceAndGeneric(Type interfaceWithParam, Type specificTypeParameter)
然后如果我有以下对象
public interface IRepository<T> { };
public class FooRepo : IRepository<Foo> { };
public class DifferentFooRepo : IRepository<Foo> {};
然后我希望能够做到:
var repos = GetByInterfaceAndGeneric(typeof(IRepository<>), typeof(Foo));
并获得一个包含FooRepo 和DifferentFooRepo 类型的IEnumerable。
这与this question 非常相似,但是使用该示例我想同时搜索IRepository<> 和User。
【问题讨论】:
-
您的问题确实可以通过使用
GetAllTypesImplementingOpenGenericType接受的答案完全解决,您只需在x.GenericTypeArguments[0].IsAssignableFrom(specificTypeParameter)的每个if 中添加一个条件,以检查特定的类型参数。跨度> -
只要
var closedType = interfaceWithParam.MakeGenericType(specificTypeParameter)。那么你的任务就变成了“找到所有实现特定接口的类型”。 -
我会说它甚至是这个问题和类似问题的重复:stackoverflow.com/q/26733/5311735
-
@ScottChamberlain 你能详细说明一下吗?我知道我对此很接近,但我应该在哪里添加这些条件?使用您提出的解决方案,我似乎无法使其正常工作。
-
我认为这不是 stackoverflow.com/q/26733/5311735 的副本。虽然这个链接的问题很相似,但我的问题是特定于通过实际的通用接口参数进行搜索的。我在研究中确实遇到了这个问题,但对我来说差异并不小,因为没有@Rainman 提供的答案,我无法解决我的问题。
标签: c# .net reflection