static IApplicationBuilder GetModuleBuilder( IApplicationBuilder app, ModuleInstance moduleInstance) { var moduleStartup = moduleInstance.ModuleServices.GetRequiredService <IModuleStartup>(); var moduleBuilder = new ApplicationBuilder(moduleInstance.ModuleServices, app.ServerFeatures); return(moduleBuilder.UseRequestServices(moduleStartup.Configure)); }
public ModuleInstance UseModule(IApplicationBuilder app, string moduleName, string moduleInstanceId, PathString pathBase) { if (_moduleInstances.ContainsKey(moduleInstanceId)) { throw new InvalidOperationException($"A module with instance ID {moduleInstanceId} is already in use"); } if (!_modulesDescriptors.ContainsKey(moduleName)) { throw new InvalidOperationException($"Module {moduleName} is not loaded"); } var moduleDescriptor = GetModuleDescriptor(moduleName); ModuleInstanceOptions moduleInstanceOptions; _options.ModuleInstanceOptions.TryGetValue(moduleInstanceId, out moduleInstanceOptions); var moduleInstance = new ModuleInstance( moduleDescriptor, moduleInstanceId, pathBase, SharedServices, app.ApplicationServices, moduleInstanceOptions); _moduleInstances.Add(moduleInstance.ModuleInstanceId, moduleInstance); var moduleBuilder = GetModuleBuilder(app, moduleInstance); app.UseWhenPath(pathBase, branch => { branch.Use(next => { moduleBuilder.Run(next); var module = moduleBuilder.Build(); return(context => module(context)); }); }); return(moduleInstance); }