2013-06-13 2 views
0

다른 매개 변수가있는 카탈로그에 동일한 모듈을 두 번 추가하는 방법을 알고 계십니까?
MEF 모듈을 카탈로그에 두 번 추가하십시오.

ITest acc1 = new smalltest("a", 0) 
ITest acc2 = new smalltest("b", 1) 

AggregateCatalog.Catalogs.Add(??) 
AggregateCatalog.Catalogs.Add(??) 

미리 감사드립니다.

답변

0

MEF는 속성의 사용으로 제한되며 일반적으로 IoC 컨테이너에서 제공하는 유연성과 달리 가져 오기 및 내보내기 속성을 사용하여 구성 할 수 있으므로 MEF에서 Part을 확장하는 방법은 참조 된 항목에서 확장 할 수 있습니다 DLL을 사용하면 [ExportAttribute]으로 일부 속성을 표시하는 클래스를 만들어 클래스가 이전 MEF 파트에서 상속 한 것과 비슷한 작업을 수행 할 수도 있습니다. 이 속성은 클래스의 사용에만 국한되지 않고 속성에 적용될 수 있습니다. 예를 들어, 이런 식으로하면 어떨까요? 제가

10의 값 B 오전 I 5.
의 값으로 오전

:

public class PartsToExport 
{ 
    [Export(typeof(ITest))] 
    public Implementation A 
    { 
     get { return new Implementation("A", 5); } 
    } 

    [Export(typeof(ITest))] 
    public Implementation B 
    { 
     get { return new Implementation("B", 10); } 
    } 
} 

public interface ITest 
{ 
    void WhoAmI(Action<string, int> action); 
} 

[Export] 
public class Implementation : ITest 
{ 
    private string _method; 
    private readonly int _value; 

    public Implementation(string method, int value) 
    { 
     _method = method; 
     _value = value; 
    } 

    public void WhoAmI(Action<string, int> action) 
    { 
     action(_method, _value); 
    } 
} 

[TestClass] 
public class Tests 
{ 
    [TestMethod] 
    public void Test() 
    { 
     var catalog = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()); 
     CompositionContainer container = new CompositionContainer(catalog); 

     var tests = container.GetExportedValues<ITest>(); 

     foreach (var test in tests) 
     { 
      test.WhoAmI((s, i) => Console.WriteLine("I am {0} with a value of {1}.", s, i)); 
     } 
    } 
} 

는 콘솔에 다음 출력
관련 문제