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(); }