StructureMap - 如何在不同类的构造函数中创建接口的不同实例(通过不同的构造函数值)

问题描述 投票:1回答:1

我有这个类和接口:

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对象传递给Box2Box3StructureMap的构造函数,但是每个构造函数都应该具有不同的值。

我真的想要一种机制来确定哪些qazxsw poi对象(女巫参数值)应该传递给女巫qazxsw poi类。这是实施Book课程的条件。

有关更好的说明,请参阅下图:

Box

我写了以下配置:

Box

但真正的enter image description hereFor<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。我不知道如何设置配置只需在Box3IBook myBookmyBook的构造函数中设置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中)。

c# structuremap
1个回答
2
投票

我不确定在你的真实例子中出了什么问题,但总的来说你只需要:

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
© www.soinside.com 2019 - 2024. All rights reserved.