での使用のために(別のコンストラクタ値で)インタフェースの異なるインスタンスを作るために、私はこのクラスとインタフェースを持っている:私はBox1
のコンストラクタにBookオブジェクトを渡したいのStructureMap - どのように異なるクラスのコンストラクタ
Public interface IBook{
}
public class Book:IBook
{
public Book(int num){
//...
}
}
//------------------------------------------------------
Public interface IBox{
}
Public interface IBoxA:IBox{
}
Public interface IBoxB:IBox{
}
Public interface IBoxC:IBox{
}
//------------------------------------------------------
public class Box1:IBoxA
{
public Box1(IBook myBook, ..........){
//...
}
}
public class Box2:IBoxB
{
public Box2(IBook myBook, ..........){
//...
}
}
public class Box3:IBoxC
{
public Box3(IBook myBook, ..........){
//...
}
}
、Box2
& Box3
StructureMap
IOCですが、それぞれがコンストラクタで異なる値を持つ必要があります。
本当に私は、魔女Book
オブジェクト(魔女の魔法のパラメータ値)を決定するメカニズムを魔法使いBox
クラスに渡す必要があります。 Box
クラスをインスタンス化するための条件です。より良い説明のために
次の画像を参照してください。
私は、以下の設定を記述します。
For<IBoxA>()
.HybridHttpOrThreadLocalScoped()
.Use<Box1>();
For<IBoxB>()
.HybridHttpOrThreadLocalScoped()
.Use<Box2>();
For<IBoxC>()
.HybridHttpOrThreadLocalScoped()
.Use<Box3>();
ForConcreteType<Box1>()
.Configure
.Ctor<IBook>("myBook")
.Is(new Book(1));
ForConcreteType<Box2>()
.Configure
.Ctor<IBook>("myBook")
.Is(new Book(2));
ForConcreteType<Box3>()
.Configure
.Ctor<IBook>("myBook")
.Is(new Book(3));
しかし、実際にBox1
、Box2
とBox3
はそのコンストラクタで多くのパラメータを持っており、そのうちの1つはIBook myBook
です。私はBox1
、Box2
およびBox3
のコンストラクタに適切なオブジェクトを設定するだけで、設定をどのように設定することができるのか分かりません。
EDIT1:
私の実際のプロジェクトが異なっていると私はそれの削減名との関係で私の質問を簡素化しようとした、私が実際のプロジェクトでいくつかのミスを持っているが、私ことは可能です次のようなエラーが表示されます。
No default Instance is registered and cannot be automatically determined for type 'IBook' There is no configuration specified for 'IBook'
上記のシナリオでIBookの別の設定を定義する必要がありますか?
私のコードは(魔女Box
に)それがどこにあるかに依存しているIBook
»»Book
Book
は、パラメータとそのパラメータの値を持つコンストラクタを持っているので、ためない別の設定があります。
提供した設定(コードの最後のブロック)で何が間違っていますか? – Evk
@エバーク、この方法または別の方法をお勧めしますか? – RAM
私はまだよく分かりません。あなたが必要としていることを理解しているかどうか、もしそうならあなたが気に入らないものを見つけようとしています。 – Evk