public async Task CanConfigurePluginsHaveUniqueNames()
        {
            var randomGenerator = new Random(Guid.NewGuid().GetHashCode());
            var nameOptions     = new PluginNameOptions()
            {
                PluginNameGenerator = (options, type) => $"CustomPlugin{randomGenerator.Next(int.MaxValue)}"
            };

            var catalog = new DelegatePluginCatalog(new Action(() =>
            {
                _testOutputHelper.WriteLine("Hello from test");
            }), nameOptions: nameOptions);

            var catalog2 = new DelegatePluginCatalog(new Action(() =>
            {
                _testOutputHelper.WriteLine("Hello from test");
            }), nameOptions: nameOptions);

            await catalog.Initialize();

            await catalog2.Initialize();

            var firstPlugin  = catalog.Single();
            var secondPlugin = catalog2.Single();

            Assert.NotEqual(firstPlugin.Name, secondPlugin.Name);
        }
Beispiel #2
0
        public DelegatePluginCatalog(MulticastDelegate multicastDelegate,
                                     List <DelegateConversionRule> conversionRules = null,
                                     PluginNameOptions nameOptions = null, DelegatePluginCatalogOptions options = null, string pluginName = null)
        {
            if (multicastDelegate == null)
            {
                throw new ArgumentNullException(nameof(multicastDelegate));
            }

            _multicastDelegate = multicastDelegate;

            if (conversionRules == null)
            {
                conversionRules = new List <DelegateConversionRule>();
            }

            if (options != null)
            {
                _options = options;
            }
            else
            {
                _options = new DelegatePluginCatalogOptions();
            }

            _options.ConversionRules = conversionRules;

            if (nameOptions == null)
            {
                nameOptions = new PluginNameOptions();
            }

            _options.NameOptions = nameOptions;

            if (!string.IsNullOrWhiteSpace(pluginName))
            {
                _options.NameOptions.PluginNameGenerator = (pluginNameOptions, type) => pluginName;
            }
        }
Beispiel #3
0
        public TypePluginProviders(Type pluginType, Action <PluginNameOptions> configure, PluginNameOptions nameOptions, TypePluginOptions options)
        {
            if (pluginType == null)
            {
                throw new ArgumentNullException(nameof(pluginType));
            }

            _pluginType = pluginType;
            _options    = options ?? new TypePluginOptions();

            if (_options.TypeFinderCriterias == null)
            {
                _options.TypeFinderCriterias = new Dictionary <string, TypeFinderCriteria>();
            }

            if (_options.TypeFinderCriterias.Any() != true)
            {
                _options.TypeFinderCriterias.Add(string.Empty, new TypeFinderCriteria()
                {
                    Query = (context, type) => true
                });
            }

            if (_options.TypeFindingContext == null)
            {
                _options.TypeFindingContext = new PluginAssemblyLoadContext(pluginType.Assembly);
            }

            if (_options.TypeFinderOptions == null)
            {
                _options.TypeFinderOptions = new TypeFinderOptions();
            }

            if (_options.TypeFinderOptions.TypeFinderCriterias?.Any() != true)
            {
                _options.TypeFinderOptions.TypeFinderCriterias = new List <TypeFinderCriteria>();

                if (_options.TypeFinderCriterias?.Any() == true)
                {
                    foreach (var typeFinderCriteria in _options.TypeFinderCriterias)
                    {
                        var typeFinder = typeFinderCriteria.Value;
                        typeFinder.Tags = new List <string>()
                        {
                            typeFinderCriteria.Key
                        };

                        _options.TypeFinderOptions.TypeFinderCriterias.Add(typeFinder);
                    }
                }
            }

            if (configure == null && nameOptions == null)
            {
                return;
            }

            var naming = nameOptions ?? new PluginNameOptions();

            configure?.Invoke(naming);

            _options.PluginNameOptions = naming;
        }
Beispiel #4
0
 public TypePluginProviders(Type pluginType, PluginNameOptions nameOptions) : this(pluginType, null, nameOptions, null)
 {
 }
Beispiel #5
0
 public TypePluginCatalog(Type pluginType, PluginNameOptions nameOptions) : this(pluginType, null, nameOptions, null)
 {
 }
Beispiel #6
0
        public TypePluginCatalog(Type pluginType, Action <PluginNameOptions> configure, PluginNameOptions nameOptions, TypePluginCatalogOptions options)
        {
            if (pluginType == null)
            {
                throw new ArgumentNullException(nameof(pluginType));
            }

            _pluginType = pluginType;
            _options    = options ?? new TypePluginCatalogOptions();

            if (configure == null && nameOptions == null)
            {
                return;
            }

            var naming = nameOptions ?? new PluginNameOptions();

            configure?.Invoke(naming);

            _options.PluginNameOptions = naming;
        }