Ejemplo n.º 1
0
        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 FolderPluginCatalogOptions
            {
                TypeFinderCriteria = new TypeFinderCriteria()
                {
                    Name = "*JsonResolver"
                },
                PluginLoadContextOptions = new PluginLoadContextOptions()
                {
                    UseHostApplicationAssemblies = UseHostApplicationAssembliesEnum.Selected,
                    HostApplicationAssemblies    = new List <AssemblyName>()
                    {
                        typeof(Microsoft.Extensions.Logging.LoggerFactory).Assembly.GetName()
                    }
                }
            };

            var catalog = new FolderPluginCatalog(@"..\..\..\..\..\Assemblies\bin\JsonOld\netstandard2.0", 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);
        }
Ejemplo n.º 2
0
        public async Task FolderOptionsAreUsedToLimitLoadedAssemblies()
        {
            var options = new FolderPluginCatalogOptions
            {
                TypeFinderOptions = new TypeFinderOptions()
                {
                    TypeFinderCriterias = new List <TypeFinderCriteria>()
                    {
                        TypeFinderCriteriaBuilder
                        .Create()
                        .HasName("SecondPlugin")
                        .Tag("MyPlugin"),
                    }
                }
            };

            var catalog = new FolderPluginCatalog(_pluginFolder, options);

            await catalog.Initialize();

            var field = catalog.GetType().GetField("_catalogs", BindingFlags.Instance | BindingFlags.NonPublic);
            // ReSharper disable once PossibleNullReferenceException
            var loadedAssemblies = (List <AssemblyPluginCatalog>)field.GetValue(catalog);

            // ReSharper disable once AssignNullToNotNullAttribute
            Assert.Single(loadedAssemblies);
        }
Ejemplo n.º 3
0
        public async Task CanUseFolderOptions()
        {
            var options = new FolderPluginCatalogOptions
            {
                TypeFinderOptions = new TypeFinderOptions()
                {
                    TypeFinderCriterias = new List <TypeFinderCriteria>()
                    {
                        TypeFinderCriteriaBuilder
                        .Create()
                        .HasName("SecondPlugin")
                        .Tag("MyPlugin"),
                    }
                }
            };

            var catalog = new FolderPluginCatalog(_pluginFolder, options);

            await catalog.Initialize();

            var pluginCount = catalog.GetPlugins().Count;

            Assert.Equal(1, pluginCount);
            Assert.Equal("SecondPlugin", catalog.Single().Type.Name);
        }
        ///<inheritdoc/>
        public IPluginCatalog Convert(IConfigurationSection configuration)
        {
            var path = configuration.GetValue <string>("Path")
                       ?? throw new ArgumentException("Plugin Framework's FolderCatalog requires a Path.");

            var options = new CatalogFolderOptions();

            configuration.Bind($"Options", options);

            var folderOptions = new FolderPluginCatalogOptions();

            folderOptions.IncludeSubfolders = options.IncludeSubfolders ?? folderOptions.IncludeSubfolders;
            folderOptions.SearchPatterns    = options.SearchPatterns ?? folderOptions.SearchPatterns;

            return(new FolderPluginCatalog(path, folderOptions));
        }
Ejemplo n.º 5
0
        public async Task CanConfigureNamingOptions()
        {
            var options = new FolderPluginCatalogOptions()
            {
                PluginNameOptions = new PluginNameOptions()
                {
                    PluginNameGenerator = (nameOptions, type) => type.FullName + "Modified"
                }
            };

            var catalog = new FolderPluginCatalog(_pluginFolder, options);
            await catalog.Initialize();

            var plugins = catalog.GetPlugins();

            foreach (var plugin in plugins)
            {
                Assert.EndsWith("Modified", plugin.Name);
            }
        }