Как я могу переопределить композицию 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], но этот вопрос как раз о внедрении конструктора.