ipjohnson / Grace

Grace is a feature rich dependency injection container library
MIT License
336 stars 33 forks source link

Child container fails to resolve registered depencency #270

Open publee opened 3 years ago

publee commented 3 years ago

I am trying to resolve concrete type with dependency registered in child container, but it throws exception.

[Test]
public void TestMethod2()
{
    var container = new DependencyInjectionContainer();
    var childScope = container.CreateChildScope(c => c.Export<Service2>().As<IService2>());

    var service = childScope.Locate<Service>();//LocateException : Could not locate Type TestGraceIoc.UnitTest2+IService2

    Assert.IsInstanceOf<Service>(service);
    Assert.IsInstanceOf<Service2>(service.P1);
}

public interface IService2 { }
public class Service2 : IService2 { }

public class Service 
{
    public Service(IService2 p1)
    {
        P1 = p1;
    }
    public IService2 P1 { get; }
}
ipjohnson commented 3 years ago

@publee I appologize I missed this issue.

Technically speaking by default Grace won't look in a child container for a dependency. You can configure it that way but honestly it makes things slower.

I assume since this is more than a month old you either solved the problem or moved to a different container.

publee commented 3 years ago

Can you please provide example how to configure Grace to look in a child container for a dependency? Thank you.

mcdis commented 3 years ago

Hi @publee !

var container = new DependencyInjectionContainer(_ =>
{
  _.Behaviors.ConstructorSelection = ConstructorSelectionMethod.Dynamic;
});