application.go 1.9 KB

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