MEF 및 PRISM을 사용하는 응용 프로그램 (테스트 만 있음)이 있습니다.MEF/PRISM 응용 프로그램의 모든 모듈에 싱글 톤 구성 및 노출
특정 인터페이스 을 준수하는 일부 내보내기를로드하고로드되는 모듈의 생성자로 전달하는 것은 꽤 쉽지만 다른 작업을 시도하고 있습니다.
응용 프로그램이 시작되면 IControllerClient의 구현을 가져옵니다. 그런 다음 생성 된 인스턴스를 구성해야합니다 (예 : 셸). 응용 프로그램의 모든 모듈에서 모듈에 액세스해야합니다.
쉘이나 일부 보조자 클래스에 public 속성을 갖고 싶지 않으므로 이 인스턴스는 나쁜 습관으로 간주 될 수 있습니다 ... 그리고 나는 그것을 정말로 좋아하지 않습니다.
업데이트 :우리는 기존의 프레임 워크에 정의 된 인터페이스의 수는
아래의 질문을 한 문구를 수정, 일반적으로 이러한 다양한 애플리케이션에 MEF를 사용하여로드됩니다.
나는 다음과 같은 예를 들어, 프리즘 응용 프로그램에서 모듈로로드 할 수 있었다 :이 경우[ImportingConstructorAttribute()]
public HelloWorldView(IDataTransportService dataTransportService,
IMessageFactory messageFactory,
IDataFactory dataFactory,
IDataProcessor dataProcessor,
IDataCollector dataCollector)
{
var client = new ControllerClient(dataTransportService,
messageFactory,
dataProcessor
dataCollector);
}
이 모듈은 ControllerClient 클래스의 유효한 인스턴스를 만듭니다. 그러나 대신 생성자 이러한 인터페이스를 통과
은이 같은 모듈 생성자 갖고 싶어 :
[ImportingConstructorAttribute()]
public HelloWorldView(IClient client)
{
this.client = client;
}
IClient 구현 (ControllerClient)의 생성자 갖는다 ImportingConstructorAttribute을()]를 나는이 시점에서 자동으로 을 삽입 할 것을 기대했지만 ...이 코드를 사용하면 생성자가 결코 도달하지 않습니다.
내가 원하는 것은 응용 프로그램의 모든 모듈에서 사용하는 IClient 인터페이스의 한 인스턴스를 갖는 것입니다. (이제 공유는 MEF 가져 오기의 기본값 임).
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 왜 모듈 생성자가 IClient 인 을 가져갈 수 없으며 mef에 대한 지식이 없어도 클래스의 인스턴스를이 방식으로 노출하고 싶다면 어떻게해야합니까?
mef/prism 응용 프로그램에서 모든 모듈에서 사용할 수있는이 인스턴스를 어디에서 정의 하시겠습니까? 그리고 이것은 종종 서비스라고 불리는 것입니다 (단결/프리즘으로 서비스 노출에 대한 지침 만 찾을 수 있습니다).
이번에는 내 문제에 대해 더 잘 설명했으면합니다.
업데이트 2 : 기본은 MEF 수입에 대해 공유하고 있기 때문에, 나는 모든 모듈의 IClient 구현을 가져올 수 있지만, 의존성이 MEF, 공유를 위해
PartCreationPolicy를 설정하면 어떤 점이 좋습니까? 이게 네가 필요로하는 것처럼 나에게 들린다. –
아마도 내 문제를 잘못 설명하고 있습니다. 죄송합니다. – TimothyP