2011-10-22 10 views
0

私はソリューションに2つのプロジェクトを持っています。 Project1UI参照Project1UIからProject2Reports既にロードされているアセンブリにどのように反映するか?

Project1UI: 
    MainForm.cs 

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

、どのように私はBaseReportから継承するすべてのクラスを見つけることができますか? project1UIはすでに2番目のアセンブリを参照しています。すでに読み込まれているため、手動で2番目のアセンブリ(たとえばAssembly.Load)を手動で読み込まなくても実行できます。

+2

これを試す前にアセンブリがまだロードされていません。 Assembly.Load()を使用します。または型(BaseReport)。アセンブリ、同じもの。 –

答えて

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コールを使用して追加すると、要求のとおりにレポートのインスタンスを提供する単純なファクトリクラスを使用します。

関連する問題