Structuremap Stackoverflow异常

时间:2009-05-01 19:57:09

标签: c# dependency-injection inversion-of-control structuremap stack-overflow

当我调用“GetInstance”(最后一行)时,我一直收到stackoverflow异常。全部,是的我的所有类型都实现了ITracker。 MultiTracker有一个带有单个参数的构造函数,它是一个ITracker的数组。

似乎StructureMap忽略了这样一个事实:我告诉它MultiTracker是我在申请ITracker类型时想要的默认类。

我无法让它发挥作用。有什么想法吗?

Container = new Container(x =>
 {
  //Multitracker takes ITracker[] in its constructor
  x.ForRequestedType<MultiTracker>().TheDefault.Is.OfConcreteType<MultiTracker>().TheArrayOf<ITracker>().Contains(z =>
   {
    z.OfConcreteType<ConcreteType1>(); //ConcreteType1 : ITracker
    z.OfConcreteType<ConcreteType2>(); //ConcreteType2 : ITracker
   });

  x.ForRequestedType<ITracker>().TheDefault.Is.OfConcreteType<MultiTracker>();
    });

//Run a test - this explodes
Container.GetInstance<ITracker>();

1 个答案:

答案 0 :(得分:0)

我不确定我是否会这样做,但它有效......

    public void Initialize()
    {
        var container = new Container(x => 
            x.ForRequestedType<ITracker>()
            .TheDefaultIsConcreteType<MultiTracker>()
            .OnCreation(y => 
                ((MultiTracker)y).Trackers = new ITracker[]
                {
                    new ConcreteType1(), new ConcreteType2()
                }
            ));
        container.GetInstance<ITracker>();
    }

    public class MultiTracker : ITracker
    {
        public ITracker[] Trackers { get; set; }
    }