设为首页 加入收藏

TOP

[Abp vNext 源码分析] - 1. 框架启动流程分析(三)
2019-09-17 18:57:11 】 浏览:55
Tags:Abp vNext 源码 分析 框架 启动 流程
der app) { Check.NotNull(app, nameof(app)); // 获取 IApplicationBuilde 的对象访问器,并将其值设置为 app。 app.ApplicationServices.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = app; // 获得之前在 ConfigureService 注册的 Provider 类型,并调用其初始化方法。 app.ApplicationServices.GetRequiredService<IAbpApplicationWithExternalServiceProvider>().Initialize(app.ApplicationServices); }

这里可能会疑惑 ObjectAccessor<IApplicationBuilder> 是在什么时候注入的,其实该类型是在 AbpAspNetCoreModule 模块注册的。

public class AbpAspNetCoreModule : AbpModule
{
    // ... 其他代码
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        // ... 其他代码
        context.Services.AddObjectAccessor<IApplicationBuilder>();
    }
    // ... 其他代码
}

接着看初始化方法内部的操作,初始化方法定义是在基类当中,方法名是 InitializeModules() ,在方法内部,通过 IModuleManager 来执行模块的初始化方法。

protected virtual void InitializeModules()
{
    using (var scope = ServiceProvider.CreateScope())
    {
        scope.ServiceProvider
            .GetRequiredService<IModuleManager>()
            .InitializeModules(new ApplicationInitializationContext(scope.ServiceProvider));
    }
}

除了模块的初始化,模块的销毁动作 Abp vNext 好像是没有作处理,你可以挂载 IApplicationLifetime.ApplicationStopping 事件来手动执行模块的销毁方法。

三、总结

总体来说 Abp vNext 的启动流程与之前精简了许多,这是因为在新的框架当中将许多基础组件从核心层移除了,用户可以自由选择自己需要加载的组件。IoC 相关的代码则是通过的 Microsoft Dependency 提供的 IServiceProvider/IServiceCollection 进行操作,没有了之前的 IocManager

四、点击我跳转到文章目录

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C# 设置Excel数据自适应行高、列.. 下一篇c#解决浏览器跨域问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目