0

"GetInstance"(最後の行)を呼び出すと、私はstackoverflow例外を取得し続けます。すべて、はい私のすべてのタイプのITrackerを実装します。 MultiTrackerには、単一のパラメータを持つコンストラクタがあります。これはITrackerの配列です。Structuremap Stackoverflow例外

Structure Mapは、ITrackerのタイプを要求するときにMultiTrackerが必要とするデフォルトクラスであるということを無視しているようです。

私はそれを動作させることができません。何かご意見は?

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」タグとは何ですか?ウィキペディアで見つけられる唯一の「ioc」は国際オリンピック委員会です。 – lothar

答えて

0

これはので、私は、このようなもののcouldnとしてそれを投稿していないよ答えではありません

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; } 
    } 
関連する問題