저는 플러그인 유형의 아키텍처를 구현하기위한 코드를 작성하고 있습니다. 인터페이스를 정의했고 IThing
이라는 이름 공간을 플러그인으로 사용하기 위해 MyStuff
이라는 이름 공간을 사용하고 DLL에서 플러그인의 인스턴스를 동적으로 생성하는 코드도 있습니다..Net 인터페이스가 동등한 것으로 간주되는시기는 언제입니까?
if (typeof(IThing).IsAssignableFrom(instType))
이 모두 잘하고 인터페이스 즉를 참조, 내 자신의 코드에 무언가에 의해 구현 될 때 작동 확인 : 내 코드는 함께 무엇을 발견 테스트 궁극적 통해 클래스, 필드와 메소드를 노출보고하여이를 수행 어셈블리에 MyStuff.IThing
정의를 제공합니다.
다른 국가의 다른 회사의 다른 개발자가 플러그 가능 구성 요소를 쓰고 있습니다.
MyStuff.IThing
에 대한 인터페이스 정의 (예 : C# 소스)를 개발자에게 보냈으며 코드에 포함 시켰습니다.
먼저 문제는 그의 구성 요소가 MyStuff.IThing
을 구현했지만 위의 IsAssignableFrom
테스트를 통과하지 못한다는 점입니다. 실패의 이유는 동일한 네임 스페이스를 갖고 인터페이스 정의가 변경되지 않았더라도 다른 어셈블리 (자연스럽게)에 인터페이스 정의가 있다는 것입니다. 여기에있는 해결책은 간단합니다. 인터페이스를 포함하는 어셈블리 DLL을 보내는 것입니다.
내 질문은 이것입니다 : 네임 스페이스가 일치하고 인터페이스 정의가 동일하다면 어떤 어셈블리가 발견되는 것이 중요할까요? 어셈블리 A에 MyStuff.IThing
이 어셈블리 B에 MyStuff.IThing
과 완전히 동일한 인터페이스 정의가 포함되어있는 경우 MyStuff.IThing
인스턴스로 작업하려는 응용 프로그램의 목적을 위해 이러한 어셈블리를 교환 할 수없는 이유는 무엇입니까?
어셈블리 이름은 형식을 식별하는 요소의 일부이므로 중요합니다. –