application.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package application
  2. import (
  3. "git.sxidc.com/go-framework/baize/convenient/binding"
  4. "git.sxidc.com/go-framework/baize/framwork/api"
  5. "git.sxidc.com/go-framework/baize/framwork/infrastructure"
  6. "git.sxidc.com/go-framework/baize/framwork/infrastructure/logger"
  7. "git.sxidc.com/go-tools/utils/strutils"
  8. )
  9. type App struct {
  10. // api实例
  11. apiInstance *api.Api
  12. // 基础设施实例
  13. infrastructureInstance *infrastructure.Infrastructure
  14. // 日志
  15. loggerInstance *logger.Logger
  16. }
  17. // New 创建Application
  18. func New(api *api.Api, i *infrastructure.Infrastructure) *App {
  19. return &App{
  20. apiInstance: api,
  21. infrastructureInstance: i,
  22. }
  23. }
  24. // Start 运行应用
  25. func (app *App) Start() error {
  26. err := app.apiInstance.Start()
  27. if err != nil {
  28. return err
  29. }
  30. return nil
  31. }
  32. // Finish 终止应用
  33. func (app *App) Finish() error {
  34. err := app.apiInstance.Finish()
  35. if err != nil {
  36. return err
  37. }
  38. return nil
  39. }
  40. // Api 获取api实例
  41. func (app *App) Api() *api.Api {
  42. return app.apiInstance
  43. }
  44. // Infrastructure 获取Infrastructure实例
  45. func (app *App) Infrastructure() *infrastructure.Infrastructure {
  46. return app.infrastructureInstance
  47. }
  48. // Logger 获取logger实例
  49. func (app *App) Logger() *logger.Logger {
  50. return app.loggerInstance
  51. }
  52. const (
  53. RouterRoot = "root"
  54. RouterPrefix = "prefix"
  55. )
  56. // Binder 创建Binder
  57. func (app *App) Binder(routerType string, version string) *binding.Binder {
  58. var router api.Router
  59. switch routerType {
  60. case RouterRoot:
  61. router = app.Api().RootRouter()
  62. case RouterPrefix:
  63. router = app.Api().PrefixRouter()
  64. default:
  65. router = app.Api().PrefixRouter()
  66. }
  67. if strutils.IsStringNotEmpty(version) {
  68. router = router.VersionedRouter(version)
  69. }
  70. return binding.NewBinder(router, app.infrastructureInstance)
  71. }