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接口实例)。

Logo

一站式 AI 云服务平台

更多推荐