Skip to content

Overriding a value from a parent di container #50

Open
@matdurand

Description

@matdurand

Is it possible to override a value that is already defined in a parent container?

For example, let's say I want to override the Logger for a specific DI container like this

type Logger interface {
}

type Logger1 struct{}
type Logger2 struct{}

func main() {
	root, err := di.New(
		di.ProvideValue(Logger1{}, di.As(new(Logger))),
	)
	if err != nil {
		panic(err)
	}

	child, err := di.New(
		di.ProvideValue(Logger2{}, di.As(new(Logger))),
	)
	if err != nil {
		panic(err)
	}

	err = child.AddParent(root)
	if err != nil {
		panic(err)
	}

	var lg Logger
	err = child.Resolve(&lg)
	if err != nil {
		panic(err)
	}
}

I get

 multiple definitions of main.Logger, maybe you need to use group type: []main.Logger

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions