Closed HuiJiOnGit closed 1 year ago
Program中有如下配置中间件的代码
Program
var scope = app.Services.GetRequiredService<IServiceScopeFactory>().CreateScope(); var myContext = scope.ServiceProvider.GetRequiredService<MyContext>(); var tasksQzServices = scope.ServiceProvider.GetRequiredService<ITasksQzServices>(); var schedulerCenter = scope.ServiceProvider.GetRequiredService<ISchedulerCenter>(); var lifetime = scope.ServiceProvider.GetRequiredService<IHostApplicationLifetime>(); app.UseSeedDataMiddle(myContext, builder.Environment.WebRootPath); app.UseQuartzJobMiddleware(tasksQzServices, schedulerCenter); app.UseConsulMiddle(builder.Configuration, lifetime); app.ConfigureEventBus();
我认为可以一些改进, 理由如下:
UseSeedDataMiddle
UseQuartzJobMiddleware
中间件
RequestDelegate
next
Configure
DBSeed.SeedAsync(myContext, webRootPath).Wait();
schedulerCenter.AddScheduleJobAsync(item).Result;
综上我认为可以使用 IHostedService和BackgroundService 来对应用启动时执行操作和启动对应服务
IHostedService
BackgroundService
好处:
Asp.Net Core
ConfigureServices
host
DI
需要改进的有
SeedDataMiddleware
QuartzJobMiddleware
ConsulMiddleware
ConfigureEventBus
你好,感谢提出改进意见,确实是 这几个中间件,确实并不涉及到管道相关的概念,只是在启动的时候,把响应的服务启动。 我一直用IHostedService来实现定时任务,当然如果不用Timer,就可以了。
你也可以帮忙先写一个pr,感觉你的提议很好,只要响应的参数都能获取到的话。
Program
中有如下配置中间件的代码我认为可以一些改进, 理由如下:
UseSeedDataMiddle
,UseQuartzJobMiddleware
这几个并不符合中间件的定义,中间件
应该是有关键的RequestDelegate
来对请求管道进行next
或短路.Configure
配置中间件的地方UseSeedDataMiddle
这个方法中同步调用了DBSeed.SeedAsync(myContext, webRootPath).Wait();
或UseQuartzJobMiddleware
中的schedulerCenter.AddScheduleJobAsync(item).Result;
综上我认为可以使用
IHostedService
和BackgroundService
来对应用启动时执行操作和启动对应服务好处:
Asp.Net Core
自带, 不需要引入第三方组件IHostedService
可以有效针对需要在应用启动时进行操作的需求, 应用会在执行完ConfigureServices
和Configure
后, 在host
启动前执行, 符合现有逻辑启动操作的时机DI
注入需要改进的有
SeedDataMiddleware
QuartzJobMiddleware
ConsulMiddleware
ConfigureEventBus