2011-08-31 5 views
1

다음과 같은 경우 MEF를 사용합니다.MEF에 맞춤 컨테이너 추가

나는 많은 모듈에 의해 솔루션을 구축하고 각 모듈은 다른 DLL에 존재합니다. 나는 모든 프로젝트를 작성하기 위해 MEF를 선택으로 사용한다. 잘 작동하지만 가끔 모듈에 서비스 클래스 (AppService)를 추가하는 경우이 클래스는이 특정 모듈의 일반 서비스를 처리하는 사용자 정의 정적 메서드를 가지고 있습니다. 이제이 방법으로 나는 이미 MEF에서 구성된 서비스를 필요로합니다. MEF 컨테이너는 메일 셸 프로그램에 이미 있습니다. 내가 필요한 참조를 얻는 방법. [가져 오기]를 사용하면 작동하지 않습니다. 예 : 사전에

public class AppService 
{ 
    [Import] 
    public IService MyService {get;set;} 

    public static int Calc() 
    { 
     return MyService.Calc(); //My service is null 
    } 
} 

감사합니다 ...

답변

2

나는 당신이 실제로 그 코드에 몇 가지 문제가있다 생각합니다.

1. AppService 유형이 구성되고 있음을 확인 했습니까? [Export]이 아니기 때문에 어떻게 생성되는지 알 수 없습니다. 당신이 컨테이너에서 AppService의 인스턴스를 잡는하지 않는 경우, 수동으로 수입을 만족해야합니다 :

var service = new AppService(); 
container.ComposeParts(service); 

2.Your 클래스 디자인은 당신이 instance 속성에 액세스하려고된다 static 방법을 가지고 있습니다. 당신이 두 가지 이유 중 하나를 시도하고 있다고 가정합니다. 또는 IService에 대한 interface이 정적 작업을 지원하거나 지원되지 않는 IService 유형을 지원하는 확장 메서드를 호출한다고 가정합니다.이 메서드는 의심되는 확장 메서드의 첫 번째 인수가 null이므로 실패합니다.

public static int Calc(this IService service) 
{ 
    return service.Calc(); // failing perhaps? 
} 

후자의 확장 방법 시나리오 인 경우 AppService 형식이 인스턴스화 된 후 구성되고 있는지 확인해야하는 1)과 비슷한 것을 제안합니다.

당신이 static 방법은 instance 속성은 아마 어쨌든 디자인을 재고 할 필요가 있음을 말해 및 static 수정 제거 할 액세스를 시도하는이 사실 :

public int Calc() 
{ 
    return MyService.Calc(); 
} 

그러나 다시를, 당신의 재산은 공개 , 그래서이 모든 사용의 방법은 전혀 무엇입니까? 현재 예제는 정적 메서드에서 인스턴스 속성에 액세스하려고 할 때 컴파일하지 않아야합니다.