您是否知道如何将同一模块两次添加到具有不同参数的目录中?
ITest acc1 = new smalltest("a", 0)
ITest acc2 = new smalltest("b", 1)
AggregateCatalog.Catalogs.Add(??)
AggregateCatalog.Catalogs.Add(??)
提前致谢!
答案 0 :(得分:0)
由于MEF仅限于使用属性,并且可以使用导入和导出属性进行配置,这与IoC容器通常提供的灵活性不同,只是如何在MEF中扩展Part
,可以扩展它从引用的DLL中,您也可以通过创建一个使用[ExportAttribute]
公开某些属性的类,从类中继承先前的MEF Part。该属性不限于类的用法,但可以应用于属性。例如,这样的事情怎么样。
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));
}
}
}
这将以下内容输出到控制台:
我是A,其值为5.
我是B,价值10。