Je joue avec le nouvel espace de noms System.ComponentModel.Composition dans .NET 4.0 beta 2, également connu sous le nom Managed Extensibility Framework.L'exception MEF "SourceProvider" doit être définie. "
Je donne l'exemple C# suivant où Monkey
importe un Banana
:
public interface IBanana
{
}
[Export(typeof(IBanana))]
public class Banana : IBanana
{
}
public class Monkey
{
[Import(typeof(IBanana))]
public IBanana Banana { get; set; }
}
Cependant, lorsque je tente de composer le singe comme suit alors je reçois un InvalidOperationException
avec le message "Cet objet n'a pas été initialisé - la propriété 'SourceProvider' doit être réglé « :
var exportProvider = new CatalogExportProvider(new TypeCatalog(typeof(Banana)));
var container = new CompositionContainer(exportProvider);
var monkey = new Monkey();
container.ComposeParts(monkey);
Qu'est-ce que je manque ici.? Je suis conscient que je peux passer le catalogue directement sans l'emballer dans un CatelogExportProvider, mais cela ne devrait-il pas marcher?
Je suis arrivé à la même conclusion en examinant le System.Component.Composition.dll avec réflecteur. En ce qui concerne la raison de créer manuellement des ExportProviders, cela est nécessaire si vous souhaitez créer un conteneur qui peut se rabattre sur les valeurs par défaut sans se plaindre de plusieurs exportations correspondantes. –