async virtual public Task WriteMetadata(IPersistStream stream) { PlugInManager plugins = new PlugInManager(); if (_providers != null) { foreach (IMetadataProvider provider in _providers) { if (provider == null) { continue; } // mit ApplyTo noch einmal das this Objekt auf den Provider // setzen, damit beim speichern immer das aktuelle Object gesetzt wird... await provider.ApplyTo(this); stream.Save("IMetadataProvider", provider); } } else { _providers = new ConcurrentBag <IMetadataProvider>(); } foreach (Type providerType in plugins.GetPlugins(typeof(IMetadataProvider))) { IMetadataProvider provider = plugins.CreateInstance(providerType) as IMetadataProvider; if (provider == null) { continue; } // nach bereits vorhanden suchen... IMetadataProvider provider2 = this.MetadataProvider(PlugInManager.PlugInID(provider)); if (provider2 != null) { continue; } if (await provider.ApplyTo(this)) { stream.Save("IMetadataProvider", provider); _providers.Add(provider); } } }
virtual public void WriteMetadata(IPersistStream stream) { PlugInManager plugins = new PlugInManager(); if (_providers != null) { foreach (IMetadataProvider provider in _providers) { if (provider == null) continue; // mit ApplyTo noch einmal das this Objekt auf den Provider // setzen, damit beim speichern immer das aktuelle Object gesetzt wird... provider.ApplyTo(this); stream.Save("IMetadataProvider", provider); } } else { _providers = new List<IMetadataProvider>(); } foreach (XmlNode providerNode in plugins.GetPluginNodes(Plugins.Type.IMetadataProvider)) { IMetadataProvider provider = plugins.CreateInstance(providerNode) as IMetadataProvider; if (provider == null) continue; // nach bereits vorhanden suchen... IMetadataProvider provider2 = this.MetadataProvider(PlugInManager.PlugInID(provider)); if (provider2 != null) continue; if (provider.ApplyTo(this)) { stream.Save("IMetadataProvider", provider); _providers.Add(provider); } } }