Skip to content

Commit dc3af2e

Browse files
committed
refactor: rename to Transient
1 parent 039c189 commit dc3af2e

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

pkg/container/container.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ func New() *Container {
4040
return container
4141
}
4242

43+
func (c *Container) Derived() *Container {
44+
childContainer := New()
45+
childContainer.parent = c
46+
return childContainer
47+
}
48+
4349
func (c *Container) Must() *MustContainer {
4450
return &MustContainer{
4551
c,
@@ -227,8 +233,11 @@ func (c *Container) setConnections() error {
227233
func (c Container) resolve(t reflect.Type) (resolvedValue reflect.Value, err error) {
228234
node, ok := c.typeIndex[t]
229235
if !ok {
230-
err = errors.Errorf(errors.E_DEPENDENCY_NOT_FOUND, "dependency not found for type %v", t)
231-
return
236+
if c.parent == nil {
237+
err = errors.Errorf(errors.E_DEPENDENCY_NOT_FOUND, "dependency not found for type %v", t)
238+
return
239+
}
240+
return c.parent.resolve(t)
232241
}
233242

234243
if node.singleton && node.resolved {
@@ -265,8 +274,11 @@ func (c Container) resolve(t reflect.Type) (resolvedValue reflect.Value, err err
265274
func (c Container) resolveToken(token string) (resolvedValue reflect.Value, err error) {
266275
node, ok := c.tokenIndex[token]
267276
if !ok {
268-
err = errors.Errorf(errors.E_DEPENDENCY_NOT_FOUND, "dependency not found for token '%s'", token)
269-
return
277+
if c.parent == nil {
278+
err = errors.Errorf(errors.E_DEPENDENCY_NOT_FOUND, "dependency not found for token '%s'", token)
279+
return
280+
}
281+
return c.parent.resolveToken(token)
270282
}
271283

272284
if node.singleton && node.resolved {

pkg/container/container_fill_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestFill(t *testing.T) {
1616
return bytes.NewBuffer([]byte{})
1717
}
1818

19-
err := cont.Dependencies(dependantResolver, testutils.NewService)
19+
err := cont.Transient(dependantResolver, testutils.NewService)
2020
cont.Token(map[string]any{
2121
"buffer": func() *bytes.Buffer {
2222
return bytes.NewBuffer([]byte{})

pkg/container/container_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
func TestDetectCircularDependencies(t *testing.T) {
1717
cont := container.New()
1818

19-
err := cont.Dependencies(func(s io.Writer) (*slog.Logger, error) {
19+
err := cont.Transient(func(s io.Writer) (*slog.Logger, error) {
2020
return slog.New(slog.NewJSONHandler(s, nil)), errors.New("an artificial error")
2121
}, func(logger *slog.Logger) testutils.MyService {
2222
return testutils.MyService{}
@@ -32,7 +32,7 @@ func TestDetectCircularDependencies(t *testing.T) {
3232
func TestDetectCircularDependencies_SelfReference(t *testing.T) {
3333
cont := container.New()
3434

35-
cont.Dependencies(func(s testutils.MyService) testutils.MyService {
35+
cont.Transient(func(s testutils.MyService) testutils.MyService {
3636
return testutils.MyService{}
3737
})
3838

@@ -43,7 +43,7 @@ func TestDetectCircularDependencies_SelfReference(t *testing.T) {
4343
func TestResolve(t *testing.T) {
4444
cont := container.New()
4545

46-
cont.Dependencies(testutils.NewService)
46+
cont.Transient(testutils.NewService)
4747

4848
_, err := container.Resolve[testutils.MyService](cont)
4949
require.NoError(t, err, "testutils.MyService should be resolved")
@@ -56,7 +56,7 @@ func TestResolve_WithDependencies(t *testing.T) {
5656
return bytes.NewBuffer([]byte{})
5757
}
5858

59-
err := cont.Dependencies(dependantResolver, testutils.NewService)
59+
err := cont.Transient(dependantResolver, testutils.NewService)
6060
require.NoError(t, err)
6161

6262
_, err = container.Resolve[testutils.MyService](cont)
@@ -92,7 +92,7 @@ func TestResolveToken_WithDependencies(t *testing.T) {
9292
err := cont.Token(map[string]any{"buffer": dependantResolver})
9393
require.NoError(t, err)
9494

95-
cont.Dependencies(testutils.NewService)
95+
cont.Transient(testutils.NewService)
9696

9797
buf, err := container.ResolveToken[*bytes.Buffer](cont, "buffer")
9898
require.NoError(t, err)
@@ -102,14 +102,14 @@ func TestResolveToken_WithDependencies(t *testing.T) {
102102
func TestContainerDependency(t *testing.T) {
103103
cont := container.New()
104104

105-
cont.Dependencies(testutils.NewService)
105+
cont.Transient(testutils.NewService)
106106
cont.Token(map[string]any{
107107
"buffer": func() *bytes.Buffer {
108108
return bytes.NewBuffer([]byte{})
109109
}},
110110
)
111111

112-
cont.Dependencies(func(c *container.Container) testutils.MyDeps {
112+
cont.Transient(func(c *container.Container) testutils.MyDeps {
113113
deps := testutils.MyDeps{}
114114
err := c.Fill(&deps)
115115
require.NoError(t, err)
@@ -126,7 +126,7 @@ func TestContainerDependency(t *testing.T) {
126126
func TestSingleton(t *testing.T) {
127127
cont := container.New()
128128

129-
cont.Dependencies(func() *bytes.Buffer {
129+
cont.Transient(func() *bytes.Buffer {
130130
return bytes.NewBuffer([]byte{})
131131
})
132132

pkg/container/must_container.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (c *MustContainer) Token(dependencies map[string]any) *MustContainer {
3232
}
3333

3434
func (c *MustContainer) Dependencies(resolvers ...any) *MustContainer {
35-
err := c.container.Dependencies(resolvers...)
35+
err := c.container.Transient(resolvers...)
3636
if err != nil {
3737
panic(err)
3838
}

0 commit comments

Comments
 (0)