补充ioc
This commit is contained in:
parent
c3a407ba0b
commit
60320a9861
@ -368,3 +368,16 @@ func GetService() Service {
|
|||||||
return ioc.Controller().Get(AppName).(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 (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/infraboard/mcube/v2/http/gin/response"
|
"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/apps/blog"
|
||||||
"gitlab.com/go-course-project/go17/vblog/middleware"
|
"gitlab.com/go-course-project/go17/vblog/middleware"
|
||||||
|
"gitlab.com/go-course-project/go17/vblog/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 上传怎么用:
|
// 上传怎么用:
|
||||||
// main.go 组装的时候,传入具体实现, 实现了业务的 插件化
|
// main.go 组装的时候,传入具体实现, 实现了业务的 插件化
|
||||||
// 访问我们mock测试, 有助于构造 小规模的单元环境
|
// 访问我们mock测试, 有助于构造 小规模的单元环境
|
||||||
func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler {
|
// func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler {
|
||||||
return &BlogApiHandler{
|
// return &BlogApiHandler{
|
||||||
blog: blogImpl,
|
// blog: blogImpl,
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
ioc.Api().Registry(&BlogApiHandler{})
|
||||||
}
|
}
|
||||||
|
|
||||||
type BlogApiHandler struct {
|
type BlogApiHandler struct {
|
||||||
|
ioc.ObjectImpl
|
||||||
blog blog.Service
|
blog blog.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *BlogApiHandler) Init() error {
|
||||||
|
i.blog = blog.GetService()
|
||||||
|
i.Registry(server.GinServer)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 提供注册功能, 提供一个Group
|
// 提供注册功能, 提供一个Group
|
||||||
// book := server.Group("/api/tokens")
|
// book := server.Group("/api/tokens")
|
||||||
func (h *BlogApiHandler) Registry(r *gin.Engine) {
|
func (h *BlogApiHandler) Registry(r *gin.Engine) {
|
||||||
router := r.Group("/vblog/api/v1/blogs")
|
router := r.Group("/vblog/api/v1/blogs")
|
||||||
|
router.GET("", h.QueryBlog)
|
||||||
|
|
||||||
router.Use(middleware.Auth)
|
router.Use(middleware.Auth)
|
||||||
router.POST("", h.CreateBlog)
|
router.POST("", h.CreateBlog)
|
||||||
router.GET("", h.QueryBlog)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// BODY
|
// BODY
|
||||||
|
@ -4,16 +4,24 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
||||||
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
||||||
"gitlab.com/go-course-project/go17/vblog/middleware"
|
"gitlab.com/go-course-project/go17/vblog/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
var BlogService blog.Service = &BlogServiceImpl{}
|
func init() {
|
||||||
|
ioc.Controller().Registry(&BlogServiceImpl{})
|
||||||
|
}
|
||||||
|
|
||||||
// 定义一个struct, 用于实现 UserService就是刚才定义的接口
|
// 定义一个struct, 用于实现 UserService就是刚才定义的接口
|
||||||
// 怎么才能判断这个结构体没有实现这个接口
|
// 怎么才能判断这个结构体没有实现这个接口
|
||||||
type BlogServiceImpl struct {
|
type BlogServiceImpl struct {
|
||||||
|
ioc.ObjectImpl
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *BlogServiceImpl) Name() string {
|
||||||
|
return blog.AppName
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateBlog implements blog.Service.
|
// CreateBlog implements blog.Service.
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
"gitlab.com/go-course-project/go17/vblog/apps/blog"
|
||||||
"gitlab.com/go-course-project/go17/vblog/apps/blog/impl"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -23,7 +22,7 @@ func TestCreateBlog(t *testing.T) {
|
|||||||
"Language": "Golang",
|
"Language": "Golang",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
ins, err := impl.BlogService.CreateBlog(ctx, req)
|
ins, err := blog.GetService().CreateBlog(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -36,7 +35,7 @@ func TestQueryBlog(t *testing.T) {
|
|||||||
req.Tags = map[string]string{
|
req.Tags = map[string]string{
|
||||||
"Language": "Golang",
|
"Language": "Golang",
|
||||||
}
|
}
|
||||||
ins, err := impl.BlogService.QueryBlog(ctx, req)
|
ins, err := blog.GetService().QueryBlog(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,18 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
"gitlab.com/go-course-project/go17/vblog/utils"
|
"gitlab.com/go-course-project/go17/vblog/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
AppName = "blog"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetService() Service {
|
||||||
|
return ioc.Controller().Get(AppName).(Service)
|
||||||
|
}
|
||||||
|
|
||||||
type Service interface {
|
type Service interface {
|
||||||
// 创建博客
|
// 创建博客
|
||||||
CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)
|
CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package apps
|
package apps
|
||||||
|
|
||||||
import (
|
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/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/token/impl"
|
||||||
_ "gitlab.com/go-course-project/go17/vblog/apps/user/impl"
|
_ "gitlab.com/go-course-project/go17/vblog/apps/user/impl"
|
||||||
)
|
)
|
||||||
|
@ -3,20 +3,27 @@ package api
|
|||||||
import (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/infraboard/mcube/v2/http/gin/response"
|
"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/apps/token"
|
||||||
|
"gitlab.com/go-course-project/go17/vblog/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewTokenApiHandler(tokenImpl token.UserService) *TokenApiHandler {
|
func init() {
|
||||||
return &TokenApiHandler{
|
ioc.Api().Registry(&TokenApiHandler{})
|
||||||
token: tokenImpl,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type TokenApiHandler struct {
|
type TokenApiHandler struct {
|
||||||
|
ioc.ObjectImpl
|
||||||
// 业务控制器
|
// 业务控制器
|
||||||
token token.UserService
|
token token.UserService
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *TokenApiHandler) Init() error {
|
||||||
|
i.token = token.GetService()
|
||||||
|
i.Registry(server.GinServer)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 提供注册功能, 提供一个Group
|
// 提供注册功能, 提供一个Group
|
||||||
// book := server.Group("/api/tokens")
|
// book := server.Group("/api/tokens")
|
||||||
func (h *TokenApiHandler) Registry(r *gin.Engine) {
|
func (h *TokenApiHandler) Registry(r *gin.Engine) {
|
||||||
|
@ -56,6 +56,10 @@ func (t *TokenServiceImpl) IssueToken(ctx context.Context, in *token.IssueTokenR
|
|||||||
// 3. 颁发Token
|
// 3. 颁发Token
|
||||||
tk := token.NewToken(fmt.Sprintf("%d", u.Id)).SetRefUserName(u.Username)
|
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 {
|
if err := datasource.DBFromCtx(ctx).Create(tk).Error; err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<mxfile host="65bd71144e">
|
<mxfile host="65bd71144e">
|
||||||
<diagram id="QJ9SYQZkHZ_Pkl1wdixx" name="第 1 页">
|
<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>
|
<root>
|
||||||
<mxCell id="0"/>
|
<mxCell id="0"/>
|
||||||
<mxCell id="1" parent="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">
|
<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"/>
|
<mxGeometry x="400" y="400" width="60" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</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"/>
|
<mxGeometry x="30" y="500" width="200" height="230" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
|
@ -3,30 +3,16 @@ package main
|
|||||||
import (
|
import (
|
||||||
"log"
|
"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"
|
"github.com/infraboard/mcube/v2/ioc/config/http"
|
||||||
"gitlab.com/go-course-project/go17/vblog/config"
|
"gitlab.com/go-course-project/go17/vblog/config"
|
||||||
|
"gitlab.com/go-course-project/go17/vblog/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config.LoadConfig()
|
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)
|
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