第22章 通过内置管道实例化IServiceProvider接口实例
public virtual void ConfigureRequestPipeline(IApplicationBuilder application){//通过.NetCore框架的内置管道接口实例,实例化“IServiceProvider”接口实例。ServiceProvider = application.ApplicationServices;//从单例实例的字典成员实例中获取获取We
1 Core.Infrastructure.Engine.ConfigureServices
/// <param name="application">.NetCore框架内置管道接口实例。</param>
/// <summary>
/// 【配置】
/// <remarks>
/// 摘要:
/// 通过.NetCore框架的内置管道接口实例,实例化“IServiceProvider”接口实例,同时把继承于“IStartup”所有具体现类中的中间件实例集成到.NetCore框架内置管道中。
/// </remarks>
/// </summary>
public virtual void ConfigureRequestPipeline(IApplicationBuilder application)
{
//通过.NetCore框架的内置管道接口实例,实例化“IServiceProvider”接口实例。
ServiceProvider = application.ApplicationServices;
//从单例实例的字典成员实例中获取获取Web应用程序域类型查找器实例。
var typeFinder = Singleton<ITypeFinder>.Instance;
//获取继承于“IStartup”的所有具体实现类的类型实例。
var startupConfigurations = typeFinder.FindClassesOfType<IStartup>();
//通过反射方式把继承于“IStartup”的所有具体实现类进行实例化操作。
var instances = startupConfigurations
.Select(startup => (IStartup)Activator.CreateInstance(startup))
.OrderBy(startup => startup!.Order);
//把继承于“IStartup”的所有具体实现类的实例,同时把继承于“IStartup”所有具体现类中的中间件实例集成到.NetCore框架内置管道中。
foreach (var instance in instances)
instance!.Configure(application);
}
2 Framework.Infrastructure.Extensions.ApplicationBuilderExtensions
using Core.Infrastructure;
using Microsoft.AspNetCore.Builder;
namespace Framework.Infrastructure.Extensions
{
/// <summary>
/// 【应用程序生成扩展--类】
/// <remarks>
/// 摘要:
/// 通过当前类中的成员方法把参与程序与页面的“应/答”操作的中间件,集成到.Net(Core)内置置管实例中。
/// </remarks>
/// </summary>
public static class ApplicationBuilderExtensions
{
/// <param name="application">.NetCore框架内置管道接口实例。</param>
/// <summary>
/// 【配置】
/// <remarks>
/// 摘要:
/// 通过.NetCore框架的内置管道接口实例,实例化“IServiceProvider”接口实例,同时把继承于“IStartup”所有具体现类中的中间件实例集成到.NetCore框架内置管道中。
/// </remarks>
public static void ConfigureRequestPipeline(this IApplicationBuilder application)
{
EngineContext.Current.ConfigureRequestPipeline(application);
}
}
}
3 重构Program.cs文件
// 通过.NetCore框架的内置管道接口实例,实例化“IServiceProvider”接口实例,同时把继承于“IStartup”所有具体现类中的中间件实例集成到.NetCore框架内置管道中。
app.ConfigureRequestPipeline();
app.Run();
4 通过BuildServiceProvider实例化IServiceProvider接口实例
本人认为在Core.Infrastructure.Engine.ConfigureServices方法中,通过对builder.Services.BuildServiceProvider()方法的重构调用来实例化IServiceProvider接口实例,更加符合.NetCore框架的定义规则,是更好的解决方案。


对以上功能更为具体实现和注释见230122_016shopDemo(通过内置管道实例化IServiceProvider接口实例)。
更多推荐


所有评论(0)