我有一个与此相似的场景:
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类
如何将字符串传递给Class B的Class A构造函数?
答案 0 :(得分:2)
您当前的方法定义了两个单独的构造函数参数来构造类型B
:一个类型A
和一个名称“a”,另一个类型字符串和名称“test”。第二个不存在,因此被忽略。
相反,你可以这样做:
cg.For<B>().Use<B>().Ctor<A>().IsSpecial(i => i.Type<A>().Ctor<string>().Is("change me"));