我有这个类和接口:
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, ..........){
//...
}
}
我想通过Box1
IOC将Book对象传递给Box2
,Box3
和StructureMap
的构造函数,但是每个构造函数都应该具有不同的值。
我真的想要一种机制来确定哪些qazxsw poi对象(女巫参数值)应该传递给女巫qazxsw poi类。这是实施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
,IBook myBook
和myBook
的构造函数中设置Box1
参数和适当的对象。
EDIT1
我真正的项目是不同的,我试图通过减少名称和它的关系来简化我的问题,然后我可能在实际项目中有一些错误,但我得到一个类似的错误:
Box2
。我应该在上面的场景中为IBook定义另一个配置吗?
我的代码没有Box3
»»No default Instance is registered and cannot be automatically determined for type 'IBook' There is no configuration specified for 'IBook'
的另一个配置,因为IBook
有一个带参数的构造函数,其参数的值取决于它在哪里(在女巫Book
中)。
我不确定在你的真实例子中出了什么问题,但总的来说你只需要:
Book
并解决使用接口(所以Box
而不是c.For<IBoxA>()
.Use<Box1>()
.Ctor<IBook>().Is(new Book(1));
c.For<IBoxB>()
.Use<Box2>()
.Ctor<IBook>().Is(new Book(2));
c.For<IBoxC>()
.Use<Box3>()
.Ctor<IBook>().Is(new Book(3));
):
IBoxB