Базовый Виндзорский Конструктор Инъекция
Я новичок в Виндзоре, и я пытаюсь реализовать самые основные конструктора инъекций. Очевидно, API изменился настолько сильно за последние версии, что документация для текущей версии, похоже, предполагает, что вы уже знаете, как это сделать, а документация для старых версий устарела.
У меня есть простой тестовый компонент:
public class ConstructorInjectedComponent
{
public IMyComponent Component { get; set; }
public ConstructorInjectedComponent(IMyComponent component)
{
Component = component;
}
}
Существует простая реализация IMyComponent:
public class AMyComponent : IMyComponent
{
public string Name { get; set; }
public AMyComponent()
{
Name = Guid.NewGuid().ToString("N");
}
}
И я хочу как-то зарегистрировать свои типы в Windsor, чтобы я мог получить экземпляр ConstructorInjectedComponent, который содержит экземпляр его зависимости: IMyComponent.
Я зарегистрировал AMyComponent так:
_container.Register(Component.For(typeof(AMyComponent)));
Я зарегистрировал ConstructorInjectedComponent, как это:
_container.Register(Component.For(typeof(ConstructorInjectedComponent)));
и попытался решить это с
_container.Resolve(typeof(ConstructorInjectedComponent));
Но это терпит неудачу с "не может создать компонент ConstructorInjectedComponent, потому что у него есть зависимости, которые должны быть удовлетворены.
поэтому я пытаюсь передать в IDictionary зависимостей для ConstructorInjectedComponent ... и это где документация мне не удается.
Я понятия не имею, как определить этот словарь. Я не могу найти документацию, которая объясняет это. Я пробовал это:
var d = new Dictionary<string, string>() {{"IMyComponent", "AMyComponent"}};
_container.Register(Component.For(typeof(ConstructorInjectedComponent))
.DependsOn(dependencies));
Но это терпит неудачу с той же самой ошибкой "имеет зависимости, которые необходимо решить".
Что я делаю неправильно?
1 ответ
Во-первых, важно убедиться, что вы понимаете основные понятия, а именно, что такое компонент, что такое сервис и что такое зависимость.
Документация об этом довольно хорошая.
Документация о том, как использовать API регистрации, должна помочь вам начать работу.
TL; Dr Asnwer является: с ConstructorInjectedComponent
зависит от IMyComponent
убедитесь, что вы зарегистрировались AMyComponent
выставлять IMyComponent
как услуга.
_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>());