Simple Injector - 注册IEnumerable抽象类实现

时间:2015-05-17 08:57:26

标签: c# dependency-injection simple-injector

我正在使用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处理,因为在这个子类中也有其他注册(不是在这种情况下,而是在真实中)例)。

注意:如果有替代方法的想法,也欢迎这些!

1 个答案:

答案 0 :(得分:5)

container.RegisterCollection<Animal>(new[] {
    typeof(Cat), 
    typeof(Dog), 
    typeof(Pig)
});

// or using Auto-Registration
container.RegisterCollection<Animal>(new [] {
    typeof(Animal).Assembly
});