Пример #1
0
        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));
        }
Пример #2
0
        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);
        }