2010-05-16 9 views
4

Je dois enregistrer une instance d'objet dans un conteneur. Je ne peux pas utiliser le ComposeExportedValue<T> générique puisque je ne sais pas ce que T est au moment de la compilation.Enregistrement d'instances avec MEF

La méthode que je besoin est quelque chose comme ceci: container.RegisterInstance (Type UnType, instance objet)

Toutes les idées?

Répondre

2

est ici une version de ComposeExportedValue qui n'est pas générique:

public static void ComposeExportedValue(this CompositionContainer container, string contractName, object exportedValue) { 
    if (container == null) 
     throw new ArgumentNullException("container"); 
    if (exportedValue == null) 
     throw new ArgumentNullException("exportedValue"); 
    CompositionBatch batch = new CompositionBatch(); 
    var metadata = new Dictionary<string, object> { 
     { "ExportTypeIdentity", AttributedModelServices.GetTypeIdentity(exportedValue.GetType()) } 
    }; 
    batch.AddExport(new Export(contractName, metadata,() => exportedValue)); 
    container.Compose(batch); 
} 

public static void ComposeExportedValue(this CompositionContainer container, object exportedValue) { 
    if (container == null) 
     throw new ArgumentNullException("container"); 
    if (exportedValue == null) 
     throw new ArgumentNullException("exportedValue"); 
    ComposeExportedValue(container, AttributedModelServices.GetContractName(exportedValue.GetType(), exportedValue); 
} 
+0

Êtes-vous sûr que cela fonctionne? Je suis conscient de la discordance de nom de paramètre de conteneur -> composition, à part cela le code ne fonctionne toujours pas. – yang

+0

Ok mon erreur. La correction des noms de contrat a résolu le problème. Merci beaucoup! – yang