public PluginResponse InvokeMetrics(MetricsRequest metricsRequest, string metricsType) { PluginResourceAction pluginResourceAction = new PluginResourceAction(this.ConnectString); List <PluginMap> pluginMaps = pluginResourceAction.RetrievePluginMapByClassAndType(CentralConnectMetrics, metricsType); if (pluginMaps.Count != 1) { return(new PluginResponse() { IsSuccess = false, Message = Enum.GetName(typeof(CentralConnectCode), CentralConnectCode.PluginMapNotExist) }); } Logger.Write("PluginMaps", pluginMaps[0]); PluginMap pluginMap = pluginMaps[0]; Resource resource = pluginResourceAction.RetrieveResourceByTypeAndFileName(PluginResource, pluginMap.FileName); if (string.IsNullOrEmpty(resource.FileName)) { return(new PluginResponse() { IsSuccess = false, Message = Enum.GetName(typeof(CentralConnectCode), CentralConnectCode.ResourceFileNotExist) }); } System.Reflection.Assembly assembly = null; if (!LoadPluginResourceFile(resource, out assembly) || assembly == null) { return(new PluginResponse() { IsSuccess = false, Message = Enum.GetName(typeof(CentralConnectCode), CentralConnectCode.LoadResourceFileFail) }); } IMetrics iMetrics = (IMetrics)assembly.CreateInstance(pluginMap.ClassFullName); if (iMetrics == null) { return(new PluginResponse() { IsSuccess = false, Message = Enum.GetName(typeof(CentralConnectCode), CentralConnectCode.CreateMetricsInstanceFail) }); } DictionaryAction dictionaryAction = new DictionaryAction(this.ConnectString); string workspace = dictionaryAction.RetrieveValueByTypeAndKey("Settings", "Workspace"); metricsRequest.Workspace = System.IO.Path.Combine(workspace, CentralConnectMetrics); return(iMetrics.GenerateMetrics(metricsRequest)); }
private bool LoadPluginResourceFile(Resource resource, out System.Reflection.Assembly assembly) { DictionaryAction dictionaryAction = new DictionaryAction(this.ConnectString); string resources = dictionaryAction.RetrieveValueByTypeAndKey("Settings", "Resources"); string resourcePath = System.IO.Path.Combine(resources, PluginResource); if (!Directory.Exists(resourcePath)) { Directory.CreateDirectory(resourcePath); } string resourceFile = System.IO.Path.Combine(resourcePath, resource.FileName); if (!System.IO.File.Exists(resourceFile)) { using (FileStream fileStream = new FileStream(resourceFile, FileMode.CreateNew, FileAccess.Write, FileShare.None)) { fileStream.Write(resource.FileContent, 0, resource.FileContent.Length); fileStream.Flush(); fileStream.Close(); } } assembly = System.Reflection.Assembly.LoadFrom(resourceFile); return(true); }