2011-10-06 6 views
5

C# 어플리케이션에서 어셈블리에 대한 정보를 얻고 싶습니다. 다음을 사용합니다 :어셈블리 정보 얻기

Assembly.GetCallingAssembly(); 

이것은 호출 어셈블리의 정보를 완벽하게 반환합니다.

이 기능을 다른 응용 프로그램과 공유하고자하므로이 클래스 라이브러리를 클래스 라이브러리에 포함합니다.

여러 응용 프로그램에서이 클래스 라이브러리를 참조합니다. 내 응용 프로그램에서이 메서드를 호출하면 응용 프로그램이 아닌 클래스 라이브러리에 대한 정보가 반환됩니다. 클래스 라이브러리에 코드가 포함 된 상태에서 웹 응용 프로그램 어셈블리에 대한 정보를 반환하도록 위의 코드를 변경할 수있는 방법이 있습니까?

+0

질문이 너무 낮을 수 있습니다. 무엇을 성취하려고합니까? –

답변

3

클래스 라이브러리를 지능적으로 처리하는 대신 호출자가 메서드에 대한 인수로 Assembly을 전달해야하는 이유는 무엇입니까? 따라서 어떤 애플리케이션에서 메소드를 호출하면 Assembly.GetExecutingAssembly()을 전달할 것이고 클래스 라이브러리 내의 메소드는 이제 실제 호출자의 어셈블리를 가져올 수 있습니다.

0

나는 당신이 반사의 가장 위에 무엇을 제공하는지 모르겠다.하지만 추상화 할 필요가없는 시설을 추상화하고있을 수도있다. 반사는 이미 이것을 처리합니다. 그래서 그것이 그 일을하게하지 마십시오.

그러나이 API가 유용한 정보를 제공한다면 (예 : 데이터베이스에 잘 연결되는 등) 사용자의 접근 방식이 도움이 될 수 있습니다. 하지만 여전히 리팩터링 할 것을 권장합니다.

  • 이 코드를 하나의 공유 프로젝트/어셈블리에만 넣고 해당 기능을 호출해야하는 경우 프로젝트/어셈블리를 링크하면됩니다. 작업 완료를 위해 duplicate code이 필요하면 code smell으로 간주됩니다.
  • 현재 어셈블리를 확인하는 대신 Assembly 개체를 매개 변수로 사용하십시오. 이렇게하면 개의 다른 어셈블리에서 데이터를 가져오고 자하는 코드를 작성하고 현재 어셈블리를 전달할 수 있도록하기 위해 더 많은 유연성을 제공합니다. (참고 : Darin은 이미이 점을 확인했습니다.)