OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy
一、概述
通常我们会在 Startup 类通过 void ConfigureServices(IServiceCollection services) 配置应用的服务。常见的形如 AddXXX 的方法,实际上调用的都是 IServiceCollection 或直接说是 ServiceCollection 的 AddSingleton 、AddTransient 和 AddScoped等方法。调用ApplicationBuilder 的 RequestDelegate Build() 方法会调用 IServiceCollection 的扩展方法 BuildServiceProvider 会创建并返回一个 ServiceProvider 对象。
还会在 Startup 类通过 void Configure(IApplicationBuilder app, IHostingEnvironment env) 配置请求管道,在该方法内进行的主要操作是添加中间件。常见的形如 UseMiddleware 或 UseXXX 的方法,实际上调用的都是 IApplicationBuilder 或直接说是 ApplicationBuilder 的 IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware) 方法,Use 方法并不是马上将中间件配置入请求管道,而是将“实例化中间件的方式”保存到 ApplicationBuilder 内部一个列表的操作。调用ApplicationBuilder 的 RequestDelegate Build() 方法会实例化中间件并把各个中间件串联起来。