2009-05-25 4 views
3

우리는 예를 들어 네트워크 또는 com 포트를 통해 데이터 전송을 담당하는 클래스 에 의해 구현되는 인터페이스를 가지고 있습니다.MEF로 부품 별 설정

의 지금은 그것을 IDataTransporter 호출하고 우리가이 구현하자 :

ComPortDataTransporter 및 TcpDataTransporter을.

분명히이 두 가지 구성은 매우 다른 구성을 필요로합니다.

처음에는 buadrate, 시작/정지 비트 등의 설정이 있습니다. 두 번째는 IP 주소 및 포트와 같은 설정을 가지고 있습니다.

이 문제를 해결할 수있는 모범 사례가 있습니까? 결국 우리는 사용자가 "부품"을로드하고 을 한 번 구성 할 수 있기를 원합니다.

Thnx.

답변

4

트랜스 포터 부품과 함께 구성 부품을 내보낼 수 있습니다.

public interface IDataTransporterSettings 
{ 
    // any common settings are defined here 
} 

... 그리고 어떤 IDataTrasporter는 해당 유형의 공용 속성이 있다고 가정 : 다음 ... '설정을

public interface IDataTransporter 
{ 
    IDataTransporterSettings Settings { get; } 
} 

은의이 호스트 응용 프로그램 인터페이스를 정의한다고 가정 해 봅시다 "각 설정과 일치하는 많은 공개 속성을 가진 수업이 될 수 있습니다.

public class TcpDataTransporterSettings : IDataTransporterSettings 
{ 
    public string Address { get; set; } 
    public int Port { get; set; } 
} 

그런 다음 TcpDataTransporter 클래스는 Settings 속성에서 주소/포트/값을 확인하기 위해 항상 읽습니다.

이제 호스트 응용 프로그램에서 리플렉션을 사용하여 가져온 전송기 파트의 설정을 검사하고 각 public settable 속성 (문자열의 경우 TextBox, int의 경우 NumericUpDown 등)에 대한 적절한 컨트롤을 표시 할 수 있습니다.

나는 약간의 작업으로 Attributes를 통해 사람이 읽을 수있는 설명을 각 속성에 추가 할 수 있으므로 UI의 각 컨트롤에 대한 레이블을 정의 할 수 있습니다.

필자는 완전히 이것을 생각하지 못했지만 필자는 어디서나 구현하지는 못했지만 가져온 부분마다 유연한 설정을 제공 할 수있는 것처럼 들릴 수 있습니다.

+0

좋은 생각처럼 들리지만 대답으로 표시하지는 않겠지 만. 제가 지금 가지고있는 것은 Dictionary 가 IDataTransporter 인터페이스의 일부입니다. 이 솔루션도 살펴 보겠습니다. 어셈블리에 자체 .xml 구성 파일이있을 수 있는지 궁금합니다. – TimothyP