据我所知,MEF没有配置文件.在您希望应用程序使用一个实现而不是另一个实现的情况下,您可以创建一个新的ConfigurationCatalog,它将获取配置文件作为输入,并且只导出它告诉它的部分.MefContrib中可能存在类似的东西,所以我会检查那里.
除此之外,由课程本身决定他们想要使用哪种实现.实现目标的一种可能方法是使用合同名称
[Export("My Contract Name", typeof(IMyExport))]
public class A : IMyExport { }
[Export("Another Contract Name", typeof(IMyExport))]
public class B : IMyExport { }
Run Code Online (Sandbox Code Playgroud)
然后类导入IMyExport可以指定它想要使用哪个部分
[Import("Another Contract Name")]
public IMyExport MyExport { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果您知道IMyExport可以多次导出某个依赖项,则可以向导出添加元数据,并根据其元数据在运行时决定您要使用哪些导出.如果你按照这个方向行事,你的代码就会像这样
[MySpecialExport(SomeData = "ABC")]
public class A : IMyExport { }
[MySpecialExport(SomeData = "DEF")]
public class B : IMyExport { }
public class MyClass
{
[ImportMany(typeof(IMyExport))]
public IEnumerable<Lazy<IMyExport, IMyExportMetadata>> MyProperty { get; set; }
public void DoSomething()
{
var myLazyExport = MyProperty.FirstOrDefault(x => x.Metadata.SomeData == "DEF");
IMyExport myExport = myLazyExport.Value;
// Do something with myExport
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |