abpvnext 不通过构造函数注入直接获取服务

老abp可以直接通过IocManager直接获取已注册的服务,但vnext没有提供这种方法。

 

可以通过定义一个全局的IServiceScopeFactory来实现

 

1、创建GlobalServiceScopeFactory类

    public static class GlobalServiceScopeFactory
    {
        public static IServiceScopeFactory Instance { get; set; }
    }

2、Startup中覆盖

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
    {
        GlobalServiceScopeFactory.Instance = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>();
        app.InitializeApplication();
    }

3、其他地方使用

    using (var scope = GlobalServiceScopeFactory.Instance.CreateScope())
    {
        var repository = scope.ServiceProvider.GetRequiredService<IRepository<Book, Guid>>();
        var count = await repository.CountAsync();
    }

 

posted @ 2022-07-27 16:42  开拓丿飞  阅读(379)  评论(0编辑  收藏  举报