我有一个实现“ITestProperty”的对象“TestProperty”。 “TestProperty”采用字符串构造函数参数。这是在StructureMap中使用CtorDependency或WithCtorArg行配置的。StructureMap如何被用来创建具有原始构造函数argumeents的对象的setter依赖关系?
我想注入一个“ITestProperty”实例(用“TestProperty”实现)到另一个类中作为属性。当我尝试运行代码时,我得到一个异常(StructureMap Error Code 205,“Missing requested Instance property”)。
下面是一个简化版本,再现问题:
测试:
[Test]
public void Can_resolve_the_correct_property()
{
ObjectFactory.Initialize(x => x.AddRegistry(new TestRegistry()));
var instance = ObjectFactory.GetInstance<TestController>();
}
注册表设置:
public class TestRegistry : Registry
{
public TestRegistry()
{
ForRequestedType<ITestProperty>().AddInstances(
i => i.OfConcreteType<TestProperty>().WithName("Test")
.CtorDependency<string>("arg").Is("abc")
);
//ForConcreteType<TestProperty>().Configure
.CtorDependency<string>("arg").Is("abc");
ForConcreteType<TestController>().Configure
.SetterDependency(p => p.Property).Is<TestProperty>()
.WithName("Test");
}
}
测试对象:
public interface ITestProperty { }
public class TestProperty : ITestProperty
{
private readonly string arg;
public TestProperty(string arg)
{
this.arg = arg;
}
public string Arg { get { return arg; } }
}
public class TestController
{
public ITestProperty Property { get; set; }
}
当我们去初始在抛出异常的时候使用“TestController”对象。是否可以使用StructureMap来做到这一点?假设这是可能的,我需要做些什么才能使它工作?
在此先感谢。
您的注册显示您创建一个命名实例“测试”,但您的测试代码只是请求默认实例(没有指定名称)。实例命名是否相关? – 2010-09-23 12:15:10
是的,这是我们在生产中的简化版本 - 我们有多个实例。也就是说,如果可能的话,我宁愿不使用命名实例,只是处理类型 - 我们之前还有其他一些原因。 – 2010-09-23 21:18:56