我想将一些动物注册为单身,所以我用以下代码编写了一个结构图注册表:
this.For<ILion>.Use<Lion>().Singleton();
this.For<IElephant>.Use<Elephant>().Singleton();
ILion 和 IElephant 来自 IAnimal ,我也希望能够立刻获得所有动物。我试过了:
this.For<IAnimal>.Add<Lion>().Singleton();
this.For<IAnimal>.Add<Elephant>().Singleton();
但是这为每个接口提供了两个不同的 Lion 实例:
public AnyConstructor(ILion lion, IEnumerable<IAnimal> animals)
{
// lion == animals[0] should be true here, but is false
}
如何告诉结构图仅实例化一个 Lion ?
答案 0 :(得分:0)
如果您的意思是获得两个不同的Lion实例,则可以在注册表中使用Forward<TFrom, TTo>()
这样的方法:
this.For<ILion>().Use<Lion>().Singleton();
this.For<IElephant>().Use<Elephant>().Singleton();
this.Forward<ILion, IAnimal>();
this.Forward<IElephant, IAnimal>();
然后,要获取所有IAnimal实例,请使用GetAllInstances<T>()
方法,如下所示:
var lion = ObjectFactory.GetInstance<ILion>();
var elephant = ObjectFactory.GetInstance<IElephant>();
var animal = ObjectFactory.GetAllInstances<IAnimal>();