// add registry as a service
            static IExtensionsRegistry AddRegistry(IServiceCollection services, string location)
            {
                var provider      = services.BuildServiceProvider();
                var loggerFactory = provider.GetRequiredService <ILoggerFactory>();
                var registry      = ExtensionsLoader.DiscoverExtensions(loggerFactory, location);

                services.AddSingleton(registry);
                return(registry);
            }
Example #2
0
        private List <Assembly> LoadAssemblies(string[] files)
        {
            this.logger.LogDebug("Loading assemblies...");
            var assemblyList = new List <Assembly>();

            foreach (var path in files)
            {
                this.logger.LogDebug($"Loading assembly: '{path}'.");
                var assembly = ExtensionsLoader.LoadAssembly(path, this.logger);
                if (assembly != default)
                {
                    assemblyList.Add(assembly);
                }
            }

            return(assemblyList);
        }
            // make extensions available to MVC application, configures extensions and configures extension services (SRP, split?)
            static void AddApplicationParts(IMvcBuilder mvcBuilder, IExtensionsRegistry registry, IServiceCollection services, IConfiguration configuration, ILoggerFactory loggerFactory)
            {
                foreach (var extension in (registry as ExtensionsRegistry)?.Extensions)
                {
                    var assembly = extension.GetType().Assembly;
                    mvcBuilder.AddApplicationPart(assembly);

                    if (extension is IExtensionWithViews)
                    {
                        // load compiled views
                        var directory         = extension.Location;
                        var viewsAssemblyName = (extension as IExtensionWithViews).Views;
                        var logger            = loggerFactory.CreateLogger(nameof(ExtensionsConfigurator));
                        var viewsAssembly     = ExtensionsLoader.LoadAssembly(Path.Combine(directory, viewsAssemblyName), logger);
                        mvcBuilder.AddApplicationPart(viewsAssembly);
                    }

                    extension.ConfigureServices(services, configuration);
                }
            }