【发布时间】:2010-02-21 02:59:13
【问题描述】:
我的第一个目标是根据具有泛型的特定接口过滤类型。
我的第二个目标是获取泛型参数本身的类型。
public UserService : IUserService, IDisposable, IExportableAs<IUserService>
{
...
}
我不能假设类的结构、它的接口(如果有的话)或类似的。我唯一知道我的目标是 ExportableAs<T> 从用于创建此插件的共享程序集中。但是,我需要动态注册类型。
所以,我使用通用接口来标记要导出的类型。在这种情况下,它是IUserService。我这样做是假设一些漂亮的 Linq 查询可以给我想要的东西。但是,我遇到了一点麻烦。
这是我目前所拥有的:
assembly.GetTypes()
.Where(t => t.GetInterfaces().Any(i =>
i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof(IExportableAs<>))
).ToList()
.ForEach(t => _catalogs.Add(
new ComposablePart()
{
Name = t.FullName,
Type = t // This is incorrect
})
);
这是有效的,但请注意上面的评论“这是不正确的”。该类型是UserService的派生类。
我需要的最终结果是:
- 泛型类型传入
IExportableAs<T>(在本例中为IUserService) - 派生类类型(在本例中为
UserService)
这个问题得到了很好的支持,因为它让我很接近(如您在上面看到的):How to determine if a type implements a specific generic interface type 但是,我需要更进一步来找到该泛型类型。
请随意破坏我上面的 linq。
提前致谢!
【问题讨论】: