Soweit ich weiß, hat MEF keine Konfigurationsdatei. Für den Fall, dass Ihre Anwendung eine Implementierung gegenüber der anderen verwenden soll, könnten Sie möglicherweise eine neue ConfigurationCatalog
erstellen, die eine Konfigurationsdatei als Eingabe erhält und nur die Teile exportiert, an die sie weitergeleitet wird. Es ist möglich, dass sowas schon in MefContrib existiert, also würde ich dort nachsehen.
Darüber hinaus ist es Sache der Klassen selbst zu entscheiden, welche Implementierung sie verwenden möchten. Ein möglicher Weg zu erreichen, was Sie wollen, ist durch die Verwendung Vertrag Namen
[Export("My Contract Name", typeof(IMyExport))]
public class A : IMyExport { }
[Export("Another Contract Name", typeof(IMyExport))]
public class B : IMyExport { }
Dann wird die Klasse IMyExport
importieren kann, welche der Teile angeben es will
[Import("Another Contract Name")]
public IMyExport MyExport { get; set; }
verwenden Wenn Sie wissen, dass eine gewisse Abhängigkeit IMyExport
kann mehr als einmal exportiert werden, können Sie add metadata to the export und zur Laufzeit entscheiden, welche der Exporte Sie anhand seiner Metadaten verwenden möchten. Wenn Sie mit dieser Richtung gehen, würde Ihr Code in etwa so aussehen:
[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
}
}