From 2a190c9883026530b277d36e5af733c5e12b6aed Mon Sep 17 00:00:00 2001 From: Milad Rahimi Date: Thu, 7 Apr 2022 23:13:47 +0430 Subject: [PATCH] fix issue #37 --- container.go | 20 ++++++++++---------- container_test.go | 15 +++++++-------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/container.go b/container.go index 9c80dd4..167b0a2 100644 --- a/container.go +++ b/container.go @@ -92,20 +92,20 @@ func (c Container) bind(resolver interface{}, name string, singleton bool) error return errors.New("container: the resolver must be a function") } - for i := 0; i < reflectedResolver.NumOut(); i++ { - if _, exist := c[reflectedResolver.Out(i)]; !exist { - c[reflectedResolver.Out(i)] = make(map[string]binding) + if reflectedResolver.NumOut() > 0 { + if _, exist := c[reflectedResolver.Out(0)]; !exist { + c[reflectedResolver.Out(0)] = make(map[string]binding) } - if singleton { - instance, err := c.invoke(resolver) - if err != nil { - return err - } + instance, err := c.invoke(resolver) + if err != nil { + return err + } - c[reflectedResolver.Out(i)][name] = binding{resolver: resolver, instance: instance} + if singleton { + c[reflectedResolver.Out(0)][name] = binding{resolver: resolver, instance: instance} } else { - c[reflectedResolver.Out(i)][name] = binding{resolver: resolver} + c[reflectedResolver.Out(0)][name] = binding{resolver: resolver} } } diff --git a/container_test.go b/container_test.go index 2d58db8..70daf59 100644 --- a/container_test.go +++ b/container_test.go @@ -105,6 +105,13 @@ func TestContainer_Singleton(t *testing.T) { assert.NoError(t, err) } +func TestContainer_Singleton_With_Resolve_That_Returns_Error(t *testing.T) { + err := instance.Singleton(func() (Shape, error) { + return nil, errors.New("app: error") + }) + assert.Error(t, err, "app: error") +} + func TestContainer_Singleton_With_NonFunction_Resolver_It_Should_Fail(t *testing.T) { err := instance.Singleton("STRING!") assert.EqualError(t, err, "container: the resolver must be a function") @@ -166,10 +173,6 @@ func TestContainer_Transient_With_Resolve_That_Returns_Error(t *testing.T) { err := instance.Transient(func() (Shape, error) { return nil, errors.New("app: error") }) - assert.NoError(t, err) - - var s Shape - err = instance.Resolve(&s) assert.Error(t, err, "app: error") } @@ -177,10 +180,6 @@ func TestContainer_Transient_With_Resolve_With_Invalid_Signature_It_Should_Fail( err := instance.Transient(func() (Shape, Database, error) { return nil, nil, nil }) - assert.NoError(t, err) - - var s Shape - err = instance.Resolve(&s) assert.Error(t, err, "container: resolver function signature is invalid") }