0

这是https://github.com/seesharper/LightInject/issues/173的副本

我尝试使用后备和 .Create() 自动创建具体类型,但它以某种方式自行循环,我不明白为什么。

这是我的测试代码:

public class Foo
{
    public Foo(IBar bar, IBar2 bar2)
    {

    }
}

public interface IBar2
{
}

class Bar2 : IBar2
{
}

public interface IBar
{
}

class Bar : IBar
{
}

private ServiceContainer container = new ServiceContainer();


container.RegisterFallback((t, s) => true, Factory);
container.Register<IBar, Bar>();
container.Register<IBar2, Bar2>();
var foo = container.GetInstance<Foo>(); // Error here

private object Factory(ServiceRequest req)
{
    return container.Create(req.ServiceType);
}

您能否提一些建议?

即使 Factory 方法如下所示,它也会循环:

private object Factory(ServiceRequest req)
{
    container.Register(typeof(Foo));
    return container.GetInstance<Foo>();
}

但如果我事先注册 Foo 效果很好(我显然想避免)

container.Register(typeof(Foo));
var foo = container.GetInstance<Foo>(); //ok
4

2 回答 2

0

这是https://github.com/seesharper/LightInject/issues/173中确认的错误,由作者负责

于 2015-03-19T09:27:00.007 回答
0

我是 LightInject 的作者,并且该问题已通过一种变通方法进行了更新,该变通方法使容器能够解析未注册的具体类。

https://github.com/seesharper/LightInject/issues/173

于 2015-03-19T09:36:30.080 回答