У меня есть объект «TestProperty», который реализует «ITestProperty». "TestProperty" принимает аргумент строкового конструктора. Это настраивается в StructureMap с помощью чего-то вроде CtorDependency или WithCtorArg.
Я хочу внедрить экземпляр «ITestProperty» (реализованный с помощью «TestProperty») в другой класс в качестве свойства. Когда я пытаюсь запустить код, я получаю исключение (код ошибки StructureMap 205, «Отсутствует запрошенное свойство экземпляра»).
Вот упрощенная версия, воссоздающая проблему:
Контрольная работа:
[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? Предполагая, что это возможно, что мне нужно сделать, чтобы заставить его работать?
Заранее спасибо.