我有几个类继承自abstract class BrowsingGoal
。其中一些实现了一个名为的接口ICanHandleIntent<TPageIntent> where TPageIntent: PageIntent
.
举一个具体的例子:
public class Authenticate : BrowsingGoal, ICanHandleIntent<AuthenticationNeededIntent>
{
...
}
现在我想扫描 CurrentDomain 的程序集以查找实现ICanHandleIntent
与AuthenticationNeededIntent
。这是我到目前为止所拥有的,但似乎没有找到任何东西:
protected BrowsingGoal FindNextGoal(PageIntent intent)
{
// Find a goal that implements an ICanHandleIntent<specific PageIntent>
var goalHandler = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.FirstOrDefault(t => t.IsAssignableFrom((typeof (BrowsingGoal))) &&
t.GetInterfaces().Any(x =>
x.IsGenericType &&
x.IsAssignableFrom(typeof (ICanHandleIntent<>)) &&
x.GetGenericTypeDefinition() == intent.GetType()));
if (goalHandler != null)
return Activator.CreateInstance(goalHandler) as BrowsingGoal;
}
一些帮助将不胜感激!
这个条件是不正确的:
x.IsAssignableFrom(typeof(ICanHandleIntent<>))
实现通用接口实例的类型不能从通用接口定义本身分配,这ICanHandleIntent<>
代表。
你想要的是
x.GetGenericTypeDefinition() == typeof(ICanHandleIntent<>)
对类型参数的检查也是错误的。它应该是
x.GetGenericArguments()[0] == intent.GetType()
因为您正在寻找类型参数,即通用名称后面的三角括号中的类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)