public async Task CanUseSelectedHoststDependencies() { // Make sure that the referenced version of JSON.NET is loaded into memory var json = Newtonsoft.Json.JsonConvert.SerializeObject(1); // Make sure that the referenced version of Microsoft.Extensions.Logging is loaded into memory var logging = new Microsoft.Extensions.Logging.LoggerFactory(); var options = new AssemblyPluginCatalogOptions();; options.PluginLoadContextOptions = new PluginLoadContextOptions() { UseHostApplicationAssemblies = UseHostApplicationAssembliesEnum.Selected, HostApplicationAssemblies = new List <AssemblyName>() { typeof(Microsoft.Extensions.Logging.LoggerFactory).Assembly.GetName() } }; var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonOld\netstandard2.0\JsonNetOld.dll", options); await catalog.Initialize(); var oldPlugin = catalog.Single(); dynamic oldPluginJsonResolver = Activator.CreateInstance(oldPlugin); var oldPluginVersion = oldPluginJsonResolver.GetVersion(); var loggerVersion = oldPluginJsonResolver.GetLoggingVersion(); Assert.Equal("3.1.2.0", loggerVersion); Assert.Equal("9.0.0.0", oldPluginVersion); }
public async Task CanUseHostsDependencies() { // Make sure that the referenced version of JSON.NET is loaded into memory var json = Newtonsoft.Json.JsonConvert.SerializeObject(1); _testOutputHelper.WriteLine(json); var options = new AssemblyPluginCatalogOptions { PluginLoadContextOptions = new PluginLoadContextOptions() { UseHostApplicationAssemblies = UseHostApplicationAssembliesEnum.Always } }; var folder1Catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonNew\netstandard2.0\JsonNetNew.dll", options); await folder1Catalog.Initialize(); var folder2Catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonOld\netstandard2.0\JsonNetOld.dll", options); await folder2Catalog.Initialize(); var newPlugin = folder1Catalog.Single(); var oldPlugin = folder2Catalog.Single(); dynamic newPluginJsonResolver = Activator.CreateInstance(newPlugin); var newPluginVersion = newPluginJsonResolver.GetVersion(); dynamic oldPluginJsonResolver = Activator.CreateInstance(oldPlugin); var oldPluginVersion = oldPluginJsonResolver.GetVersion(); Assert.Equal("12.0.0.0", newPluginVersion); Assert.Equal("12.0.0.0", oldPluginVersion); }
public async Task CanOverrideDefaultNamingOptions() { var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Overridden" } }; var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll"); var catalog2 = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly2.dll", options); await catalog.Initialize(); await catalog2.Initialize(); var catalog1Plugins = catalog.GetPlugins(); foreach (var plugin in catalog1Plugins) { Assert.EndsWith("Modified", plugin.Name); } var catalog2Plugins = catalog2.GetPlugins(); foreach (var plugin in catalog2Plugins) { Assert.EndsWith("Overridden", plugin.Name); } }
public async Task Initialize() { var converter = new DelegateToAssemblyConverter(); var assembly = converter.CreateAssembly(_multicastDelegate, _options); var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = _options.NameOptions }; if (_options.Tags?.Any() == true) { options.TypeFinderOptions = new TypeFinderOptions { TypeFinderCriterias = new List <TypeFinderCriteria> { TypeFinderCriteriaBuilder.Create().Tag(_options.Tags.ToArray()) } }; } _catalog = new AssemblyPluginCatalog(assembly, options); await _catalog.Initialize(); IsInitialized = true; }
public async Task Initialize() { var converter = new DelegateToAssemblyConverter(); var assembly = converter.CreateAssembly(_multicastDelegate, _options); var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = _options.NameOptions }; _catalog = new AssemblyPluginCatalog(assembly, options); await _catalog.Initialize(); IsInitialized = true; }
public async Task CanConfigureNamingOptions() { var options = new AssemblyPluginCatalogOptions() { PluginNameOptions = new PluginNameOptions() { PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified" } }; var catalog = new AssemblyPluginCatalog(@"..\..\..\..\..\Assemblies\bin\netstandard2.0\TestAssembly1.dll", options); await catalog.Initialize(); var allPlugins = catalog.GetPlugins(); foreach (var plugin in allPlugins) { Assert.EndsWith("Modified", plugin.Name); } }