public bool SetParameters(PluginDetail detail) { var plugin = GetPlugin(detail.Type); if (plugin == null) { return(false); } var properties = plugin.GetType().GetProperties() .Where(it => it.GetCustomAttribute <RequiredParameterAttribute>() != null) .ToDictionary(it => it.Name, it => it); foreach (var parameter in detail.RequiredParameters) { if (properties.TryGetValue(parameter.Name, out var property) && parameter.Value.GetType() == property.PropertyType) { PluginParameterProvider.Put(plugin.GetType(), parameter.Name, parameter.Value); property.SetValue(plugin, parameter.Value); } } return(true); }
private void LoadTasksFromAssembly(Assembly assembly) { if (assembly == null) { throw new ArgumentNullException(nameof(assembly)); } var types = assembly .GetTypes() .Where(x => typeof(IJobTask).IsAssignableFrom(x)) .Where(x => x.IsAbstract == false) .Where(x => x.IsInterface == false); types.ForEach(t => { var displayName = t.GetCustomAttribute <DisplayNameAttribute>(); var description = t.GetCustomAttribute <DescriptionAttribute>(); var detail = new PluginDetail(); detail.DisplayName = displayName?.DisplayName ?? t.Name; detail.Description = description?.Description ?? t.Name; detail.SubSystem = t.Name; detail.Type = t; m_pluginDetails.Add(detail); m_taskPlugins.Add(t.Name, t); }); }
public void Init(PluginDetail pluginDetail) { if (string.IsNullOrWhiteSpace(ConfigurationFile)) { ConfigurationFile = Path.Combine(pluginDetail.PluginDirectory, DefaultConfigurationFile); } }
public void Load() { Plugins = new HashSet <IPlugin>(); PluginDetails = new Dictionary <string, PluginDetail>(); var path = Path.Combine(Environment.CurrentDirectory, PluginDirectory); foreach (var file in Directory.GetFiles(path, "*.dll")) { var ass = Assembly.LoadFile(file); var type = ass.GetTypes().FirstOrDefault(m => m.GetInterface(nameof(IPlugin)) != null); if (type == null) { continue; } var plugin = (IPlugin)Activator.CreateInstance(type); Plugins.Add(plugin); } foreach (var plugin in Plugins) { var pluginType = plugin.GetType(); var pluginDetail = new PluginDetail() { Name = plugin.Name, Author = plugin.Author, Version = plugin.Version, Type = pluginType.FullName, RequiredParameters = new List <PluginParameter>(), }; var properties = pluginType.GetProperties(); foreach (var property in properties) { var attribute = property.GetCustomAttribute <RequiredParameterAttribute>(); if (attribute == null) { continue; } var value = PluginParameterProvider.Get(pluginType, attribute.Name, attribute.Type) ?? attribute.DefaultValue; property.SetValue(plugin, value); pluginDetail.RequiredParameters.Add(new PluginParameter() { Name = attribute.Name, Alias = attribute.Alias, Type = attribute.Type, IsReadOnly = attribute.IsReadOnly, Value = value, Comment = attribute.Comment, }); } pluginDetail.SupportInterface = SupportInterface .Where(type => type.IsAssignableFrom(pluginType)) .Select(it => it.Name) .ToList(); PluginDetails.Add(pluginDetail.Type, pluginDetail); } }
private IEnumerable <PluginDetail> Parse() { var directories = Directories.SelectMany(Directory.GetDirectories); foreach (var directory in directories) { PluginDetail detail = GetPluginDetail(directory); if (detail != null) { yield return(detail); } } }
public void Init(PluginDetail pluginDetail) { _contentSheet = new ContentSheet(); }
public virtual async ValueTask <Tuple <ResponseStatus, object> > SetPluginParameters(PluginDetail detail) { var success = PluginManager.SetPluginParameters(detail); return(new Tuple <ResponseStatus, object>( success ? ResponseStatus.Success : ResponseStatus.BadRequest, success)); }
public void Init(PluginDetail pluginDetail) { // }
public bool SetPluginParameters(PluginDetail detail) { return(PluginLoader.SetParameters(detail)); }
public DisplayPlugin(PluginDetail pluginDetail) { PluginDetail = pluginDetail; Parameters = new ObservableCollection <PluginParameter>(PluginDetail.RequiredParameters); }