如何反映已加载的程序集?

时间:2011-10-22 00:07:19

标签: c# reflection c#-4.0

我在解决方案中有2个项目。 Project1UI引用Project2Reports

Project1UI:
  MainForm.cs

Project2Reports:
  BaseReport.cs  // all classes below inherit from it
  Report1.cs
  Report2.cs
  Report3.cs

从Project1UI,我如何找到从BaseReport继承的所有类? project1UI已经引用了第二个程序集 - 有没有办法在不手动加载第二个程序集(例如Assembly.Load)的情况下执行它,因为它已经加载了。

1 个答案:

答案 0 :(得分:1)

您必须处理程序集中的所有类型,并查找实现它的类型。

您可以使用类似的东西(现在手写,可能包含错误)。

foreach (Type type in Assembly.GetAssembly(typeof(BaseReport)).GetTypes())
{
    if (type != typeof(BaseReport) && typeof(BaseReport).IsAssignableFrom(type))
    {
        // we found a type, we can store it somewhere, for example, in a list and our list in a static readonly field for fast lookup in the future.
        myreports.Add(type);
    }
}

您还可以处理所有已加载的装配体。

然而,这不是最好的方法,复杂,相当模糊,很难理解。 我会使用一个简单的工厂类,它会根据您的要求为您提供报告实例,当您添加报告时,通过简单的.Add调用添加它。