// 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); }
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); } }