Базовый Виндзорский Конструктор Инъекция

Я новичок в Виндзоре, и я пытаюсь реализовать самые основные конструктора инъекций. Очевидно, 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>());
Другие вопросы по тегам