cosmos-sdk/core/appmodule/option.go
Facundo Medica c17f38d224
refactor!: rename container to cosmossdk.io/depinject (#12020)
* chore: rename container to cosmossdk.io/container

* fix imports

* add replace for container

* remove replace

* add replace

* fix replace

* fix replace

* fix replace

* fix replace

* fix replace

* try to fix replace

* rename to depinject

* rename to depinject

* do not use vanity URL for now

* try fix tests

* try fix tests

* try fix tests

* build -> inject

* build -> inject

* go mod tidy

* fix dep vulnerability

* fix dep vulnerability

* fix Dockerfile for liveness-test

* fix codeql error

* try to solve dependency review

* try to solve dependency review

* go mod tidy

* try to fix tests

* another try
2022-05-27 19:34:48 +02:00

35 lines
977 B
Go

package appmodule
import (
"cosmossdk.io/core/internal"
"github.com/cosmos/cosmos-sdk/depinject"
)
// Option is a functional option for implementing modules.
type Option interface {
apply(*internal.ModuleInitializer) error
}
type funcOption func(initializer *internal.ModuleInitializer) error
func (f funcOption) apply(initializer *internal.ModuleInitializer) error {
return f(initializer)
}
// Provide registers providers with the dependency injection system that will be
// run within the module scope. See github.com/cosmos/cosmos-sdk/depinject v1.0.0-alpha.3 for
// documentation on the dependency injection system.
func Provide(providers ...interface{}) Option {
return funcOption(func(initializer *internal.ModuleInitializer) error {
for _, provider := range providers {
desc, err := depinject.ExtractProviderDescriptor(provider)
if err != nil {
return err
}
initializer.Providers = append(initializer.Providers, desc)
}
return nil
})
}