我正在尝试在我的asp.Net MVC应用程序中实现事件监听器功能。
我创建了两个抽象/基类,如此
public abstract class Event
{
}
public abstract class Listener<T> where T : Event
{
public abstract void Handle(T @event);
}
然后我有其他的类就像这样隐藏了监听器类
public class SecondClass : Listener<UserWasRegistred>
{
public override void Handle(UserWasRegistred @event)
{
Debug.WriteLine( @event.User.FullName + " was registered!!" );
}
}
public class ThirdClass : Listener<UserWasRegistred>
{
//....
}
最后,这是Event
类的实现(即UserWasRegistred
)
public class UserWasRegistred : Event
{
public AspNetUser User { get; set; }
public UserWasRegistred(AspNetUser user)
{
User = user;
}
}
我希望能够搜索每个加载的dll
并以某种方式找到SecondClass
和ThirdClass
。 “这里的共同点是两个听众都继承了”监听器“抽象类。
这是我试过的
public static IEnumerable<Type> GetAvailableTypesFromType<T>() where T : class
{
List<Type> found = new List<Type>();
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
Type typeOfListener = typeof(T);
try
{
found.AddRange(assembly.GetTypes().Where(x => typeOfListener.IsAssignableFrom(x)).ToList());
}
catch (ReflectionTypeLoadException ex)
{
found.AddRange(ex.Types.Where(x => x != null && typeOfListener.IsAssignableFrom(x)));
}
}
return found.ToList();
}
然后我调用这样的方法
IEnumerable<Type> found = GetAvailableTypesFromType<Listener>();
但是,通过代码找不到任何类。
如何正确搜索程序集并查找继承我传递给方法的类型的所有类?