Пример #1
0
        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);
        }
Пример #2
0
        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);
            });
        }
Пример #3
0
 public void Init(PluginDetail pluginDetail)
 {
     if (string.IsNullOrWhiteSpace(ConfigurationFile))
     {
         ConfigurationFile = Path.Combine(pluginDetail.PluginDirectory, DefaultConfigurationFile);
     }
 }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
 public void Init(PluginDetail pluginDetail)
 {
     _contentSheet = new ContentSheet();
 }
Пример #7
0
        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));
        }
Пример #8
0
 public void Init(PluginDetail pluginDetail)
 {
     //
 }
Пример #9
0
 public bool SetPluginParameters(PluginDetail detail)
 {
     return(PluginLoader.SetParameters(detail));
 }
Пример #10
0
 public DisplayPlugin(PluginDetail pluginDetail)
 {
     PluginDetail = pluginDetail;
     Parameters   = new ObservableCollection <PluginParameter>(PluginDetail.RequiredParameters);
 }