如何覆盖MEF组合,以便如果导入构造函数要求单个依赖项,并且此需要的依赖项有多个实现,则需要具有最高优先级(元数据)的实现(导出)?覆盖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],但这个问题恰恰是关于构造函数注入的。
对不起,如果我很慢,但我不明白这可以帮助构造函数注入。 – W3Max 2012-03-02 14:31:59
与构造函数注入没有冲突,我们也使用它。 – 2012-03-02 15:15:09
我没有说有问题,我只是说我不明白它是如何工作的。对不起,但我是MEF世界的新手。你能解释一下上面的例子吗? – W3Max 2012-03-02 15:57:46