2010-11-24 5 views
3

MEF를 사용하여 필요할 때 DLL을로드하려고하는데 읽은 튜토리얼의 정보가 도움이되지 않았습니다.MEF DLL을 하나씩로드하십시오.

This site은 약간의 코드를 제공하지만 실제로는 설명하지 않습니다.

private void LoadPlugins() { 
    var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); 
    var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
    batch.AddPart(this); 
    container.Compose(batch); 
} 

기본적으로 나는 Run 메서드와 인터페이스가 있으며 여러 DLL을 사용하여 해당 인터페이스를 구현하고 있습니다. 무엇 난 후는

bob = LoadDll(dllPath); 
bob.Run(); 

는 "밥"의 유형을 지정하는 방법이 있나요이 (의사 코드) 같은 것을 할 수있을 것입니다 아니면 일반적인 것입니까? 누구든지 도와 주시면 감사하겠습니다!

+0

로드 할 항목을 어떻게 알 수 있습니까? MEF의 핵심은 추상/인터페이스 정의를 제외하고는 구체적인 유형에 대해 * 아무것도 * 알지 못한다는 것입니다. 특정 DLL에서 가져 오기를로드하는 것이 적절한 지 어떻게 알 수 있습니까? – arootbeer

+1

@arootbeer 사실, 이것은 MEF의 한 가지 용도이지만 인스턴스화하려는 구체적인 유형을 이미 알고 있다면 완벽하게 유효합니다. 그러나, 나는이 경우에 사용법이 OP가 달성하려고하는 것에 대해 과잉이라고 생각한다. 어셈블리에서 어떤 타입의 타입을 런타임에 발견 할 필요가 있다면 (또는 타입을 노출하는 경우) MEF가 완벽합니다. – SRM

답변

1

MEF로 원하는 것을 달성 할 수 있지만 상당히 발전했습니다. 캐시 된 카탈로그 (Codeplex 사이트의 샘플 참조)를 만들거나 CCI와 같은 다른 메타 데이터 리더를 사용해야합니다.

즉시 사용 가능합니다. MEF는 어셈블리를로드하여 (mef의 속성을 찾는) 어셈블리를로드합니다.