Laden...

MEF: Importieren mehrerer unterschiedlicher Interfaces

Erstellt von Ahrimaan vor 13 Jahren Letzter Beitrag vor 13 Jahren 917 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren
MEF: Importieren mehrerer unterschiedlicher Interfaces

Hallo,

ich bin beim Debugen grad auf was gestoßen was ich mir nicht erklären kann :


[ImportMany(typeof(IModule.IModule),AllowRecomposition = true)]
    private IModule.IModule[] _modules;

    [ImportMany(typeof (IGenericRepository.IRepository))] 
    private IGenericRepository.IRepository[] _repos;

    [ImportMany(typeof (IFileSearcher.IFileSearcher))]
    private IFileSearcher.IFileSearcher[] _fileSearcher;

    [ImportMany(typeof(IFileUploader.IFileUploader))]
    private IFileUploader.IFileUploader[] _fileUploader;

Für jedes Interfaces rufe ich eine Private Methode auf z.B.


private void LoadModuleExtensions()
    {
      var dirCatalogModules = new DirectoryCatalog("Modules");
      var container = new CompositionContainer(dirCatalogModules);
      CompositionBatch compBatch = new CompositionBatch();
      compBatch.AddPart(this);
      compBatch.AddPart(dirCatalogModules);
      container.Compose(compBatch);
    }

Bei meinen Modulen ist das Array nach der ersten Methode gefüllt, sobald er aber danach eine Methode zum Füllen der FileUploader ausführt, sind meine Module wieder leer Oo.

Habe ich was übersehen ?

Grüße

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

was meinst du mit erste Methode? Du hast doch nur eine? Oder meinst du, du hast LoadModuleExtensions und hast noch analog sowas wie LoadRepositoryExtensions, LoadFileSearcherExtensions etc.?

Wenn du Compose aufrufst, werden immer nur die jeweils verfügbaren Parts verwendet. Wenn du in einem zweiten Aufruf die vom ersten nicht mehr drin hast, sind die danach natürlich wieder leer.

Am einfachsten wärs einfach den gleichen CompositionBatch in allen Methoden zu verwenden, dann gehen die Parts da drin nicht verloren.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren

Hi,

genau das meine ich, ich habe mehrer Methoden mit LoadRepos usw.

Das bedeutet ich mach den ComposingBatch in der Klasse verfügbar und der Rest soll so bleiben ?

Grüße

6.862 Beiträge seit 2003
vor 13 Jahren

Ja, so in der Art.

Baka wa shinanakya naoranai.

Mein XING Profil.