Skip to content

Commit 91e7cc0

Browse files
committed
feat: allow to inject container itself
1 parent b8d9b55 commit 91e7cc0

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

pkg/container/container.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,21 @@ type Container struct {
1616
connected bool
1717
}
1818

19+
// Retuns a new container and sets a default dependency that allows
20+
// to inject this container as a parameter on the resolvers
1921
func New() *Container {
20-
return &Container{
22+
container := &Container{
2123
Graph: graph.NewGraph[resolver.DependencyResolver[any]](),
2224
typeIndex: make(map[reflect.Type]*graph.Node[resolver.DependencyResolver[any]]),
2325
tokenIndex: make(map[string]*graph.Node[resolver.DependencyResolver[any]]),
2426
}
27+
28+
// Allow resolvers to inject container
29+
container.AddDependency(func() *Container {
30+
return container
31+
})
32+
33+
return container
2534
}
2635

2736
func (c *Container) AddDependency(res any) error {

pkg/container/container_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,25 @@ func TestResolveToken_WithDependencies(t *testing.T) {
9999
require.NoError(t, err)
100100
require.NotNil(t, buf)
101101
}
102+
103+
func TestContainerDependency(t *testing.T) {
104+
cont := container.New()
105+
106+
cont.AddDependency(testutils.NewService)
107+
cont.AddTokenDependency("buffer", func() *bytes.Buffer {
108+
return bytes.NewBuffer([]byte{})
109+
})
110+
111+
cont.AddDependency(func(c *container.Container) testutils.MyDeps {
112+
deps := testutils.MyDeps{}
113+
err := c.Fill(&deps)
114+
require.NoError(t, err)
115+
116+
return deps
117+
})
118+
119+
deps, err := container.Resolve[testutils.MyDeps](cont)
120+
require.NoError(t, err)
121+
err = deps.CheckResolvedDependencies()
122+
require.NoError(t, err)
123+
}

0 commit comments

Comments
 (0)