Skip to content

Commit 82e3ca4

Browse files
committed
fix: detect self reference circual dependency
1 parent 6773c0f commit 82e3ca4

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

pkg/container/container.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ func (c *Container) setConnections() error {
131131
resType := reflect.TypeOf(node.Val.Resolver)
132132
for i := 0; i < resType.NumIn(); i++ {
133133
dependencyType := resType.In(i)
134+
135+
if node.Val.Type() == dependencyType {
136+
return fmt.Errorf("circular depndency found: %v", []*graph.Node[resolver.DependencyResolver[any]]{
137+
node,
138+
})
139+
}
140+
134141
dependencyNode, err := c.getNodeFor(dependencyType)
135142
if err != nil {
136143
return err

pkg/container/container_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,17 @@ func TestDetectCircularDependencies(t *testing.T) {
4343
require.NoError(t, err, "circular dependencies should not be detected")
4444
}
4545

46+
func TestDetectCircularDependencies_SelfReference(t *testing.T) {
47+
cont := container.New()
48+
49+
cont.AddDependency(func(s MyService) MyService {
50+
return MyService{}
51+
})
52+
53+
_, err := cont.DetectCircularDependencies()
54+
require.Error(t, err, "should detect self reference")
55+
}
56+
4657
func TestResolve(t *testing.T) {
4758
cont := container.New()
4859

@@ -99,3 +110,20 @@ func TestResolveToken(t *testing.T) {
99110
require.NoError(t, err)
100111
require.NotNil(t, buf)
101112
}
113+
114+
func TestResolveToken_WithDependencies(t *testing.T) {
115+
cont := container.New()
116+
117+
dependantResolver := func(service MyService) *bytes.Buffer {
118+
return bytes.NewBuffer([]byte{})
119+
}
120+
121+
err := cont.AddTokenDependency("buffer", dependantResolver)
122+
require.NoError(t, err)
123+
124+
cont.AddDependency(NewService)
125+
126+
buf, err := container.ResolveToken[*bytes.Buffer](cont, "buffer")
127+
require.NoError(t, err)
128+
require.NotNil(t, buf)
129+
}

0 commit comments

Comments
 (0)