public virtual void GetDataServiceParameters(IEnumerable <DataService> dataServices) { if (CollectionUtils.IsNullOrEmpty(dataServices)) { return; } try { string pluginRootFilePath = GetPluginFilePath(CollectionUtils.FirstItem(dataServices), true); PluginDomainInstanceLoader loader = GetPluginInstanceLoader(null, pluginRootFilePath); using (PluginDisposer disposer = new PluginDisposer(loader)) { foreach (DataService dataService in dataServices) { if ((dataService.PluginInfo != null) && !string.IsNullOrEmpty(dataService.PluginInfo.ImplementingClassName)) { try { string pluginFilePath = GetPluginFilePath(dataService, true); BaseWNOSPlugin plugin = loader.GetInstance <BaseWNOSPlugin>(pluginFilePath, dataService.PluginInfo.ImplementingClassName); DataServicePublishFlags publishFlags; dataService.ServiceParameters = plugin.GetDataServiceParameters(dataService.Name, out publishFlags); dataService.PublishFlags = publishFlags; } catch (Exception e) { // Don't publish on load error dataService.PublishFlags = DataServicePublishFlags.DoNotPublish; LOG.Error("Failed to GetDataServiceParameters for data service \"{0}\"", e, dataService.Name); } } else { // Don't publish if not implementer dataService.PublishFlags = DataServicePublishFlags.DoNotPublish; } } } } catch (Exception) { foreach (DataService dataService in dataServices) { // Don't publish if can't load dataService.PublishFlags = DataServicePublishFlags.DoNotPublish; } } }
protected virtual IPluginDisposer LoadPluginInterfaceInstance <T>(DataService inDataService, bool ignoreInstallingAssemblies, string pluginConfigFilePath, out T plugin) where T : class { string pluginFilePath = GetPluginFilePath(inDataService, ignoreInstallingAssemblies); PluginDomainInstanceLoader loader = GetPluginInstanceLoader(pluginConfigFilePath, pluginFilePath); PluginDisposer disposer = new PluginDisposer(loader); try { plugin = loader.GetInstance <T>(pluginFilePath, inDataService.PluginInfo.ImplementingClassName); } catch (Exception) { DisposableBase.SafeDispose(ref disposer); throw; } return(disposer); }