0

Я получаю исключение stackoverflow, когда я называю «GetInstance» (последняя строка). Все, да, все мои типы реализуют ITracker. MultiTracker имеет конструктор с одним параметром, который представляет собой массив ITracker.Исключение структуры Stackoverflow

Кажется, что 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>(); 
+0

Это не ответ, так что я не размещать его как таковой, но не мог Вы упрощаете этот код? Сделайте это шаг за шагом, чтобы вы могли точно видеть, что происходит? –

+0

Там вы идете, это почти так же просто, как я могу это сделать. –

+0

На каком языке вы используете? Для чего нужен тег «ioc»? Единственный «як», который я мог найти в Википедии, - это Международный олимпийский комитет. – lothar

ответ

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; } 
    }