【发布时间】:2012-03-02 02:21:08
【问题描述】:
如何覆盖 MEF 组合,以便如果导入构造函数要求单个依赖项并且此所需依赖项有多个实现,它将采用具有最高优先级(元数据)的实现(导出)?
[Export(typeof(IService))]
[ExportMetadata("Priority", 1)]
public class Service1 : IService
{
}
[Export(typeof(IService))]
[ExportMetadata("Priority", 2)]
public class Service2 : IService
{
}
public interface IService
{
}
public class ServiceWithDependencies
{
[ImportingConstructor]
public ServiceWithDependencies(IService service)
{
}
}
ServiceWithDependencies 通常不会得到满足,因为 IService 的实现不止一种。但是我想修改 MEF(覆盖/拦截某些东西),以便它使用优先级元数据并将具有最高优先级的实现注入到 ServiceWithDependencies 构造函数中。
编辑 1
我不希望 MEF 决定我做事的方式。我希望它尽可能不可见。此外,这是一个框架,我无法控制人们如何需要依赖项。我需要支持基本的构造函数注入。我知道 [ImportMany],但这个问题正是关于构造函数注入。
【问题讨论】: