我正在使用Simple Injector,并希望看看是否可以注册/解析继承抽象类的类集合。
方案如下: 我有以下抽象/具体类:
public abstract class Animal
{
public string Type { get; set; }
public abstract string MakeSound();
}
public class Dog : Animal
{
public override string MakeSound()
{
return "woof";
}
}
public class Cat : Animal
{
public override string MakeSound()
{
return "meow";
}
}
public class Pig : Animal
{
public override string MakeSound()
{
return "oink";
}
}
此外,我有一个课程应该收到IEnumerable<Animal>
并为每个动物调用MakeSound
函数,如下所示:
public class Zoo
{
private IEnumerable<Animal> _animals;
public Zoo(IEnumerable<Animal> animals)
{
_animals = animals;
}
public void MakeZooNoise()
{
foreach (var animal in _animals)
{
animal.MakeSound();
}
}
}
我想建立IEnumerable<Animal>
集合,最好使用Container初始化,并让它通过Simple Injector处理,因为在这个子类中也有其他注册(不是在这种情况下,而是在真实中)例)。
注意:如果有替代方法的想法,也欢迎这些!
答案 0 :(得分:5)
container.RegisterCollection<Animal>(new[] {
typeof(Cat),
typeof(Dog),
typeof(Pig)
});
// or using Auto-Registration
container.RegisterCollection<Animal>(new [] {
typeof(Animal).Assembly
});