如何使用c#获取继承特定类的所有类的列表?

时间:2016-11-18 01:26:31

标签: c# asp.net events

我正在尝试在我的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并以某种方式找到SecondClassThirdClass。 “这里的共同点是两个听众都继承了”监听器“抽象类。

这是我试过的

    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>();

但是,通过代码找不到任何类。

如何正确搜索程序集并查找继承我传递给方法的类型的所有类?

0 个答案:

没有答案