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));
}
}
}
이
는 콘솔에 다음 출력