type server struct {
weaver.Implements[weaver.Main]
ServiceDict weaver.Ref[dictSrv.T]
address weaver.Listener
}
func RunServe(ctx context.Context, s *server) error {
srv := nexframe.Server()
// 自动注册 ServiceWeaver 服务
err := srv.AddWeaverService(s)
if err != nil {
return fmt.Errorf("failed to add ServiceWeaver services: %v", err)
}
// 注册控制器
srv.RegisterController("/",
&books.BookController,
)
// 启动服务
server.SetPort(":8080")
server.Run()
}
package controller
import (
"github.com/ServiceWeaver/weaver"
"github.com/sagoo-cloud/nexframe/nf"
"sagooiot/ruleEngine"
"sagooiot/server/configSrv"
"sagooiot/server/dictSrv"
)
type BaseWeaverService struct {
F *nf.APIFramework // 将被自动注入,可以通过它访问框架提供的功能,也可以不填写。
ServiceDict weaver.Ref[dictSrv.T]
}
func (c *BaseWeaverService) Initialize(f *nf.APIFramework) error {
if err := f.MustGetWeaverService("ServiceConfig", &c.ServiceConfig); err != nil {
return err
}
if err := f.MustGetWeaverService("ServiceDict", &c.ServiceDict); err != nil {
return err
}
if err := f.MustGetWeaverService("ServiceRule", &c.ServiceRule); err != nil {
return err
}
return nil
}
// DictController 示例控制器
type DictController struct {
controller.BaseWeaverService
}
// 直接使用 ServiceConfig
configData, err := c.ServiceDict.Get().GetSystemConfigData(ctx, "sys.uploadFile.fileType")