查找使用类型'x'作为通用类型参数的实现通用类的类

Snajahi

我有一个接口,用于定义一些实现的事件

public interface IEvent {...}
public sealed class OrderPersisted : IEvent {...}

还有一个接口,用于通过抽象的通用中间类与实现一起处理这些事件:

public interface IEventHandler {...}
public abstract class EventHandlerBase<TEvent> : IEventHandler where TEvent : IEvent {...}
//The following event handler uses the OrderPersisted event as the generic type argument.
public sealed class OrderPersistedEventHandler : EventHandlerBase<OrderPersisted> {...}

我要实现的目标是使用反射找出哪些事件处理程序将类型为X的特定具体事件用作实现EventHandlerBase<>该类的泛型类型参数可能类似于以下内容的东西:

foreach(var eventType in myAssembliesConcreteEventTypes)
{
    myEventTypesDictionary[eventType] = 
    exportedTypesOfMyAssembly.Where(/*-- implements EventBase with eventType --*/)
}

提前致谢。

编辑

以下为我工作

foreach(var eventType in myAssembliesConcreteEventTypes)
{
    myEventTypesDictionary[eventType] = exportedTypesOfMyAssembly
        .Where(t => t.BaseType.GenericTypeArguments.Any(gta => gta == type))
        .Select(t=>(IEventHandler)Activator.CreateInstance(t))
        .ToList();
}
斯里拉姆·萨克提维(Sriram Sakthivel)
var opType = typeof(OrderPersisted);//Your choice
var myType = typeof (EventHandlerBase<>).MakeGenericType(opType);
var myExpectedTypes = Assembly.GetExecutingAssembly()
    .GetTypes()
    .Where(x => x.IsSubclassOf(myType))
    .ToArray();

我反映出Assembly.GetExecutingAssembly()您可以用感兴趣的程序集代替它。IsSubclassOf这是您基本上需要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章