更改构造函数参数值结构映射配置

时间:2017-12-11 07:02:29

标签: c# dependency-injection structuremap

我有一个与此相似的场景:

public class A
{
    private readonly string _test;

    public A() : this("hello world")
    {

    }

    public A(string test)
    {
        _test = test;
    }
}

public class B
{
    private readonly A _a;

    public B(A a)
    {
        _a = a;
    }
}

现在让我们说我有另一个班级,在这堂课中我要注入B但是这次我要在班级_test中传递A的值

public class MainClass
{
    private readonly B _b;

    public MainClass()
    {
        // this is what I want as an injected result by structure map
        _b = new B(new A("change me"));   
    }
}

为了在StructureMap中执行此操作,我创建了以下配置

var testContainer = new Container(cg =>
            {
                cg.For<A>().Use<A>();

                cg.For<B>().Use<B>().Ctor<A>("a").Is<A>().Ctor<string>("test").Is("change me");

            });

            var tsa = testContainer.GetInstance<A>();
            var tsb = testContainer.GetInstance<B>();

但这似乎没有将字符串“改变我”注入A类

enter image description here

如何将字符串传递给Class B的Class A构造函数?

1 个答案:

答案 0 :(得分:2)

您当前的方法定义了两个单独的构造函数参数来构造类型B:一个类型A和一个名称“a”,另一个类型字符串和名称“test”。第二个不存在,因此被忽略。

相反,你可以这样做:

cg.For<B>().Use<B>().Ctor<A>().IsSpecial(i => i.Type<A>().Ctor<string>().Is("change me"));