Skip to content

通用主机

使用通用主机构建辅助服务,意味着您无需从零开始编写服务框架,可以直接获得一个企业级应用程序所需的所有功能:包括开箱即用的依赖注入、统一的配置管理、强大的日志记录系统,以及标准的服务生命周期管理。这使开发者能够专注于实现业务逻辑,而无需重复构建底层基础设施,显著提升了后台任务和微服务的开发效率与可维护性。

快速启动

cangjie
import spire_extensions_hosting.*

main(args: Array<String>) {
    let builder = Host.createBuilder(args)
    let host = builder.build()
    host.run()
    return 0
}

运行结果

bash
info: spire.hosting.lifetime
      Hosting environment: Development
info: spire.hosting.lifetime
      Content root path: /app
info: spire.hosting.lifetime
      Application started. Press Ctrl+C to shut down.

上面的代码会帮我们构建一个默认主机并且运行主机。主机合了依赖注入配置日志选项环境等等。

  • 配置:命令行参数,appsettings.{environmentName}.json,appsettings.json,环境变量(前缀spire_)(按优先级从高到低排序)。
  • 日志:控制台日志,并且整合了配置,可以通过appsettings.json文件来过滤日志。
  • 选项:主机启动时,会解析IStartupValidator并执行验证。
  • 环境:主机通过读取名为environment的配置来设置环境名。

后台服务

通用主机在启动时可以运行后台服务,用于执行后台任务。

cangjie
import spire_extensions_hosting.*
import spire_extensions_injection.*

main(args: Array<String>) {
    let builder = Host.createBuilder(args)
    builder.services.addHostedService<HelloHostedService>()
    let host = builder.build()
    host.run()
    return 0
}

public class HelloHostedService <: BackgroundService {
    public func run(): Unit {
        while (true) {
            sleep(Duration.second)
            println("hello")
        }
    }
}

内置服务

通用主机为我们内置了一些服务并注入到容器,具体如下:

接口用途
ILoggerFactory用于创建和配置 ILogger 实例,管理日志记录器的生命周期和日志提供程序(如 Console、File 等)。
IConfiguration提供对应用程序配置(如 appsettings.json、环境变量、命令行参数等)的键值对访问和读取功能。
IHostEnvironment提供当前宿主环境的信息(如 ApplicationNameEnvironmentNameContentRootPath 等)。
IHostEnvironment提供当前宿主环境的信息(如 ApplicationNameEnvironmentNameContentRootPath 等)。
IHostLifetime用户可以替换默认实现,通过订阅宿主环境信号来停止应用。
IHostApplicationLifetime提供当前主机生命周期事件注册)。