提供者

简介

借鉴于Laravel思想,使用Provider来解决模块的依赖和解耦。

可以看到Firmeve中的模块都是使用Provider来注册和启动的。

在后续的开发的,我们推荐使用Provider来解决依赖和参数解耦。

创建服务提供者

注册方法

Register方法作为提供者注册初始化模块实例,所有的提供者在系统加载时都会优先使用注册方法,来完成需要的实例创建。

Register方法就是为了模块能够正常运行而提供的基础实例

启动方法

当所有的Provider加载并注册完成后,会自动调用Boot方法来唤醒当前模块。Boot方法就是模块启动的入口

基础示例

所有Provider都可以使用kernel.BaseProvider嵌入,kernel.BaseProvider主要是基于Container进行包装的快捷调用。

package app

import (
    config2 "github.com/firmeve/firmeve/config"
    "github.com/firmeve/firmeve/container"
    "github.com/firmeve/firmeve/kernel"
)

type Provider struct {
    kernel.BaseProvider
}

func (p *Provider) Name() string {
    return `app`
}

// Register
func (p *Provider) Register() {
    config := p.Resolve(`config`).(*config2.Config).Item(`logging`)
    p.Bind(`logger`, New(config), container.WithShare(true))
}

// Boot method
func (p *Provider) Boot() {

}

挂载提供者

通常我们会在main函数中初始化时挂载我们需要的提供者

如果某个Provider需要依赖于另一个Provider才可以启动,那么我们可在服务内部进行注册,如:

Last updated

Was this helpful?