# Host Service 场景
有时候可能需要建立一些独立于应用逻辑体本身的后台任务。比如:定时发送邮件、定时执行脚本这类持续运行的任务,也有验证数据库是否创建等只伴随应用启动而执行一次的任务。
我们提供了一个叫做 IHostedService 的接口,它可以便于我们更好的实现托管服务。
它是伴随hosting一同启动的任务,并拥有相同的生命周期。
目前我们实现了xxl-job的场景,用于定时的后台任务,并常驻进程。
# IHostService接口
type IHostService interface {
// Run Triggered when the application host is ready to start the service.
Run() error
// Stop Triggered when the application host is performing a graceful shutdown.
Stop() error
}
# 实现一个HostService
type Service1 struct {
}
// 这里可以注入类型参数
func NewService() *Service1 {
return &Service1{}
}
func (s *Service1) Run() error {
fmt.Println("host service Running")
return nil
}
func (s *Service1) Stop() error {
fmt.Println("host service Stopping")
return nil
}
# 注册HostService
需要将实现接口注册到DI交由框架管理,HostService作为框架的扩展点,在Hosting启动与关闭时会自动调用HostService的相应方法
ConfigureServices(func(collection *dependencyinjection.ServiceCollection) {
hosting.AddHostService(collection, NewService)
})
这里注册的NewService构造器可以使用DI带来的参数注入等特性。一个Hosting宿主可以注册多个HostService