나는 단 하나의 속성을 가진 인터페이스 인 IConfiguration
이라는 클래스가있는 클래스 라이브러리를 가지고 있습니다.적절한 MEF 구성을 설정하는 방법은 무엇입니까?
나는 IConfiguration
를 구현 TexasConfiguration
라는 클래스 라이브러리와 IConfiguration
를 구현 FloridaConfiguration
라는 다른 클래스 라이브러리를 가지고있다.
나는 내가 [Export(typeof(IConfiguration)]
와 ConfigurationSystem
라는 클래스를 밀봉 다른 클래스를 TexasConfiguration
및 FloridaConfiguration
을 장식하고 그것은 내가 가진 몇 가지 문제가 있습니다 private ConfigurationSystem() {}
로 정의 된 개인 생성자가 포함되어 있습니다. 일반적으로 말하자면, MEF 물건을 어디에 두어야합니까? 현재, 나는 다음과 같은 선언과 함께 ConfigurationSystem
에 정적 메서드를 뒀다 :
[Import(typeof(IConfiguration)]
IConfiguration configuration {get; set;}
을 위, 그것은 configuration
사용하지 않는 것을 알려줍니다. 이 경우 정상입니다.
public static void SetupConfiguration()
{
using (DirectoryCatalog catalog = new DirectoryCatalog(@"c:\\developement\source\configuration"))
{
CompositionContainer container = new CompositionContainer(catalog);
container.ComposeParts(typeof(ConfigurationSystem));
}
}
나는 할 수 있도록하려면 : 나는 그것에 typeof(ConfigurationSystem)
을 통과해야
ConfigurationSystem
에 정적 메서드를 만들었지 만이 정적 할 경우, 나는 그것을
this
를 전달할 수 없습니다
ConfigurationSystem.SetupConfiguration();
그러나이 방법은 정적으로 선언되지 않는 한 수행 할 수 없습니다. 요컨대 응용 프로그램이 시작될 때 SetupConfiguration
을 호출하고 적절한 구성 객체를 IConfiguration
에 할당 할 정적 메서드 Initialize
을 호출합니다.
문제는 'ConfigurationSystem'이 평균에 의해 작성되지 않고 봉인으로 표시 되었기 때문에 MEF 설정 코드를'ConfigurationSystem' 외부로 이동해야합니까? – Xaisoft
모든 MEF 합성 작업을 수행하는 싱글 톤이 될 수있는 부트 스트랩 클래스를 사용합니다. – IAbstract
@Xaisoft'ConfigurationSystem'을 수정할 수 없다는 사실을 이해하는 것은 상당히 어렵습니다. 'Import' 정의가'ConfigurationSystem'에 있고 정적으로 남아 있어야한다면 MEF가 그 값을 설정할 수 없습니다. 그러나 그렇다면 왜 처음에 '수입'으로 작성된 것일까 요? –