У меня есть объект «TestProperty», который реализует «ITestProperty». «TestProperty» принимает аргумент конструктора строк. Это сконфигурировано в StructureMap, используя что-то в строках CtorDependency или WithCtorArg.Каким образом StructureMap может использоваться для создания зависимостей сеттера объектов, имеющих примитивные конструкторские аргументы?
Я хочу добавить экземпляр «ITestProperty» (реализованный с помощью «TestProperty») в другой класс в качестве свойства. Когда я пытаюсь запустить код, я получаю исключение (StructureMap Error Code 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; }
}
Когда мы идем Перво lize объект TestController выше исключения. Возможно ли это сделать с помощью StructureMap? Предполагая, что это возможно, что мне нужно сделать, чтобы заставить его работать?
Заранее спасибо.
Ваши регистрационные данные показывают, что вы создали именованный экземпляр «Test», но ваш тестовый код просто запрашивает экземпляр по умолчанию (без указания имени). Соответствует ли именование экземпляра? –
Да, это упрощенная версия того, что у нас есть в производстве - у нас есть несколько экземпляров. Тем не менее, я бы предпочел не использовать именованные экземпляры, если это возможно, и просто иметь дело с типами - есть другие причины, по которым мы их использовали. –