2011-10-22 5 views
0

솔루션에 2 개의 프로젝트가 있습니다. Project1UI 내가 BaseReport에서 상속 모든 클래스를 찾을 수있는 방법, Project2Reports이미로드 된 어셈블리를 반영하는 방법은 무엇입니까?

Project1UI에서
Project1UI: 
    MainForm.cs 

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

를 참조? project1UI는 이미 두 번째 어셈블리를 참조합니다. 두 번째 어셈블리를 수동으로로드하지 않고 (예 : Assembly.Load) 수동으로로드하지 않고 수행 할 수있는 방법이 이미로드되어 있기 때문입니다.

+2

시도하기 전에 아직 어셈블리가로드되지 않았습니다. Assembly.Load()를 사용하십시오. 또는 typeof (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 호출을 통해 보고서의 인스턴스를 요청할 때 간단한 factory 클래스를 사용합니다.

관련 문제