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
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.
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