Skip to content

Commit

Permalink
fix issue #37
Browse files Browse the repository at this point in the history
  • Loading branch information
miladrahimi committed Apr 7, 2022
1 parent a5d524b commit 2a190c9
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 18 deletions.
20 changes: 10 additions & 10 deletions container.go
Expand Up @@ -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}
}
}

Expand Down
15 changes: 7 additions & 8 deletions container_test.go
Expand Up @@ -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")
Expand Down Expand Up @@ -166,21 +173,13 @@ 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")
}

func TestContainer_Transient_With_Resolve_With_Invalid_Signature_It_Should_Fail(t *testing.T) {
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")
}

Expand Down

0 comments on commit 2a190c9

Please sign in to comment.