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); }
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; } }
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; }
public TypePluginProviders(Type pluginType, PluginNameOptions nameOptions) : this(pluginType, null, nameOptions, null) { }
public TypePluginCatalog(Type pluginType, PluginNameOptions nameOptions) : this(pluginType, null, nameOptions, null) { }
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; }