Por lo que sé, MEF no tiene un archivo de configuración. En el caso de que desee que su aplicación use una implementación sobre la otra, posiblemente pueda crear una nueva ConfigurationCatalog
que obtendrá un archivo de configuración como entrada y solo exportará las partes que le indique. Es posible que algo como eso ya exista en MefContrib, así que lo verificaría allí.
Aparte de eso, depende de las clases decidir qué implementación desearían usar. Una posible manera de lograr lo que desea es mediante el uso de nombres de contrato
[Export("My Contract Name", typeof(IMyExport))]
public class A : IMyExport { }
[Export("Another Contract Name", typeof(IMyExport))]
public class B : IMyExport { }
Entonces la clase importación IMyExport
puede especificar cuál de las partes que quiere usar
[Import("Another Contract Name")]
public IMyExport MyExport { get; set; }
Si usted sabe que una cierta dependencia IMyExport
se puede exportar más de una vez, puede add metadata to the export y decidir en tiempo de ejecución cuál de las exportaciones desea usar según sus metadatos. Si va en esa dirección, su código se parecería a este
[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
}
}