Je tente d'utiliser la stratégie de création de pièces partagées pour une exportation MEF. Cependant, cela ne semble pas fonctionner comme je le pensais. Je fais la composition deux fois dans mon application et chaque fois obtenir une nouvelle copie de l'objet. Je l'ai prouvé en ajoutant un compteur d'instance à l'instanciation d'objetStratégie de création MEF
static int instCount = 0;
public FakeAutocompleteRepository()
{
instCount++;
...
}
et de lancer tout cela dans le débogage. En effet, la deuxième fois que je fais une composition que je reçois une nouvelle copie du FakeAutocompleteRepository avec instCount = 2. La section d'exportation contient
[PartCreationPolicy(CreationPolicy.Shared)]
[Export(typeof(IAutocompleteRepository))]
[ExportMetadata("IsTesting", "True")]
class FakeAutocompleteRepository : IAutocompleteRepository
{ ... }
Y at-il une astuce pour obtenir la même instance pour les demandes de subsiquent? Dans le cas où il est quelque chose que je fais au cours de la composition est ce que je fais que
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog("."));
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
if (null != ConfigurationSettings.AppSettings["IsTesting"] && bool.Parse(ConfigurationSettings.AppSettings["IsTesting"]))
repository = container.GetExports<IAutocompleteRepository>().Where(expDef => expDef.Metadata.Keys.Contains("IsTesting")).Single().GetExportedObject();
Fondamentalement, je suis en train de forcer une composition spécifique au cours des essais. Si vous avez une meilleure idée pour tester ces compositions, alors je suis tout ouïe.
Je crée totalement un nouveau conteneur à chaque fois. Existe-t-il un moyen d'interroger les conteneurs actifs ou faut-il créer une instance par application quelque part? – stimms
Il n'existe aucun moyen de rechercher des conteneurs actifs. Je devrais en savoir plus sur votre demande pour vous donner des conseils sur ce que vous devriez faire. A quoi servent les multiples compositions? –
Ce que vous pouvez faire est d'exporter votre conteneur de votre hôte et de l'importer chaque fois que vous voulez l'utiliser. Je ne l'ai pas fait, mais je pense que je l'ai vu dans l'exemple du jeu MefShapes ... –