Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MEF: Importieren mehrerer unterschiedlicher Interfaces
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

MEF: Importieren mehrerer unterschiedlicher Interfaces

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

Ja, so in der Art.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers