补充ioc
This commit is contained in:
parent
c3a407ba0b
commit
60320a9861
@ -367,4 +367,17 @@ func (i *TokenServiceImpl) Init() error {
|
||||
func GetService() Service {
|
||||
return ioc.Controller().Get(AppName).(Service)
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
启动的时候 只需要启动 HTTP Sever就可以啦
|
||||
```go
|
||||
func main() {
|
||||
config.LoadConfig()
|
||||
|
||||
// 服务器启动
|
||||
if err := server.GinServer.Run(http.Get().Addr()); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
```
|
@ -3,30 +3,44 @@ package api
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/infraboard/mcube/v2/http/gin/response"
|
||||
"github.com/infraboard/mcube/v2/ioc"
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
||||
"gitlab.com/go-course-project/go17/vblog/middleware"
|
||||
"gitlab.com/go-course-project/go17/vblog/server"
|
||||
)
|
||||
|
||||
// 上传怎么用:
|
||||
// main.go 组装的时候,传入具体实现, 实现了业务的 插件化
|
||||
// 访问我们mock测试, 有助于构造 小规模的单元环境
|
||||
func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler {
|
||||
return &BlogApiHandler{
|
||||
blog: blogImpl,
|
||||
}
|
||||
// func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler {
|
||||
// return &BlogApiHandler{
|
||||
// blog: blogImpl,
|
||||
// }
|
||||
// }
|
||||
|
||||
func init() {
|
||||
ioc.Api().Registry(&BlogApiHandler{})
|
||||
}
|
||||
|
||||
type BlogApiHandler struct {
|
||||
ioc.ObjectImpl
|
||||
blog blog.Service
|
||||
}
|
||||
|
||||
func (i *BlogApiHandler) Init() error {
|
||||
i.blog = blog.GetService()
|
||||
i.Registry(server.GinServer)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 提供注册功能, 提供一个Group
|
||||
// book := server.Group("/api/tokens")
|
||||
func (h *BlogApiHandler) Registry(r *gin.Engine) {
|
||||
router := r.Group("/vblog/api/v1/blogs")
|
||||
router.GET("", h.QueryBlog)
|
||||
|
||||
router.Use(middleware.Auth)
|
||||
router.POST("", h.CreateBlog)
|
||||
router.GET("", h.QueryBlog)
|
||||
}
|
||||
|
||||
// BODY
|
||||
|
@ -4,16 +4,24 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/infraboard/mcube/v2/ioc"
|
||||
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
||||
"gitlab.com/go-course-project/go17/vblog/middleware"
|
||||
)
|
||||
|
||||
var BlogService blog.Service = &BlogServiceImpl{}
|
||||
func init() {
|
||||
ioc.Controller().Registry(&BlogServiceImpl{})
|
||||
}
|
||||
|
||||
// 定义一个struct, 用于实现 UserService就是刚才定义的接口
|
||||
// 怎么才能判断这个结构体没有实现这个接口
|
||||
type BlogServiceImpl struct {
|
||||
ioc.ObjectImpl
|
||||
}
|
||||
|
||||
func (i *BlogServiceImpl) Name() string {
|
||||
return blog.AppName
|
||||
}
|
||||
|
||||
// CreateBlog implements blog.Service.
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/blog/impl"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -23,7 +22,7 @@ func TestCreateBlog(t *testing.T) {
|
||||
"Language": "Golang",
|
||||
},
|
||||
}
|
||||
ins, err := impl.BlogService.CreateBlog(ctx, req)
|
||||
ins, err := blog.GetService().CreateBlog(ctx, req)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -36,7 +35,7 @@ func TestQueryBlog(t *testing.T) {
|
||||
req.Tags = map[string]string{
|
||||
"Language": "Golang",
|
||||
}
|
||||
ins, err := impl.BlogService.QueryBlog(ctx, req)
|
||||
ins, err := blog.GetService().QueryBlog(ctx, req)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
@ -4,9 +4,18 @@ import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/infraboard/mcube/v2/ioc"
|
||||
"gitlab.com/go-course-project/go17/vblog/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
AppName = "blog"
|
||||
)
|
||||
|
||||
func GetService() Service {
|
||||
return ioc.Controller().Get(AppName).(Service)
|
||||
}
|
||||
|
||||
type Service interface {
|
||||
// 创建博客
|
||||
CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)
|
||||
|
@ -1,7 +1,9 @@
|
||||
package apps
|
||||
|
||||
import (
|
||||
_ "gitlab.com/go-course-project/go17/vblog/apps/blog/api"
|
||||
_ "gitlab.com/go-course-project/go17/vblog/apps/blog/impl"
|
||||
_ "gitlab.com/go-course-project/go17/vblog/apps/token/api"
|
||||
_ "gitlab.com/go-course-project/go17/vblog/apps/token/impl"
|
||||
_ "gitlab.com/go-course-project/go17/vblog/apps/user/impl"
|
||||
)
|
||||
|
@ -3,20 +3,27 @@ package api
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/infraboard/mcube/v2/http/gin/response"
|
||||
"github.com/infraboard/mcube/v2/ioc"
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/token"
|
||||
"gitlab.com/go-course-project/go17/vblog/server"
|
||||
)
|
||||
|
||||
func NewTokenApiHandler(tokenImpl token.UserService) *TokenApiHandler {
|
||||
return &TokenApiHandler{
|
||||
token: tokenImpl,
|
||||
}
|
||||
func init() {
|
||||
ioc.Api().Registry(&TokenApiHandler{})
|
||||
}
|
||||
|
||||
type TokenApiHandler struct {
|
||||
ioc.ObjectImpl
|
||||
// 业务控制器
|
||||
token token.UserService
|
||||
}
|
||||
|
||||
func (i *TokenApiHandler) Init() error {
|
||||
i.token = token.GetService()
|
||||
i.Registry(server.GinServer)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 提供注册功能, 提供一个Group
|
||||
// book := server.Group("/api/tokens")
|
||||
func (h *TokenApiHandler) Registry(r *gin.Engine) {
|
||||
|
@ -56,6 +56,10 @@ func (t *TokenServiceImpl) IssueToken(ctx context.Context, in *token.IssueTokenR
|
||||
// 3. 颁发Token
|
||||
tk := token.NewToken(fmt.Sprintf("%d", u.Id)).SetRefUserName(u.Username)
|
||||
|
||||
// if in.RememberMe {
|
||||
// tk.AccessTokenExpireAt
|
||||
// }
|
||||
|
||||
if err := datasource.DBFromCtx(ctx).Create(tk).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="QJ9SYQZkHZ_Pkl1wdixx" name="第 1 页">
|
||||
<mxGraphModel dx="947" dy="479" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<mxGraphModel dx="947" dy="354" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
@ -57,7 +57,7 @@
|
||||
<mxCell id="27" value="Text" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="400" width="60" height="30" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="29" value="<h1>对象生命周期</h1><p>1. 对象注册</p><p>2. 对象配置(通过配置文件读取)</p><p>3. 初始化(基础属性, 依然依赖)</p><p><br></p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
|
||||
<mxCell id="29" value="<h1>对象生命周期</h1><p>1. 对象注册</p><p>2. 对象配置(通过配置文件读取)</p><p>3. 初始化(基础属性, 依然依赖)</p><p>程序运行中 。。。。。。</p><p>4. 对象的销毁(销毁依赖资源,比如数据库连接,&nbsp; conn)</p><p>程序退出 。。。</p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="500" width="200" height="230" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
@ -3,30 +3,16 @@ package main
|
||||
import (
|
||||
"log"
|
||||
|
||||
blogApi "gitlab.com/go-course-project/go17/vblog/apps/blog/api"
|
||||
blogImpl "gitlab.com/go-course-project/go17/vblog/apps/blog/impl"
|
||||
"gitlab.com/go-course-project/go17/vblog/apps/token"
|
||||
tokenApi "gitlab.com/go-course-project/go17/vblog/apps/token/api"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/infraboard/mcube/v2/ioc/config/http"
|
||||
"gitlab.com/go-course-project/go17/vblog/config"
|
||||
"gitlab.com/go-course-project/go17/vblog/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
config.LoadConfig()
|
||||
|
||||
// gin Engine, 它包装了http server
|
||||
server := gin.Default()
|
||||
|
||||
// 注册业务模块的路有
|
||||
tokenApi.NewTokenApiHandler(token.GetService()).Registry(server)
|
||||
blogApi.NewBlogApiHandler(&blogImpl.BlogServiceImpl{}).Registry(server)
|
||||
// ... 50 个API
|
||||
//
|
||||
|
||||
// 服务器启动
|
||||
if err := server.Run(http.Get().Addr()); err != nil {
|
||||
if err := server.GinServer.Run(http.Get().Addr()); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
8
vblog/server/server.go
Normal file
8
vblog/server/server.go
Normal file
@ -0,0 +1,8 @@
|
||||
package server
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
var (
|
||||
// gin Engine, 它包装了http server
|
||||
GinServer = gin.Default()
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user