2012-05-10 6 views
0

Я новичок в Windsor и пытаюсь реализовать самую базовую конструкторскую инъекцию. По-видимому, API настолько изменился по сравнению с недавними версиями, что документация для текущей версии, похоже, предполагает, что вы уже знаете, как это сделать, а документация для старых версий устарела.Basic Windsor Constructor Injection

У меня есть простой тест компонент:

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"); 
    } 
} 

И я хочу, чтобы как-то зарегистрировать свои типы с Виндзоре таким образом, что я могу получить обратно экземпляр 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)); 

Но это не удается с той же ошибкой «имеет зависимости, которые необходимо устранить».

Что я делаю неправильно?

ответ

6

Прежде всего, важно убедиться, что вы понимаете основные понятия, а именно, что такое компонент, какая услуга и какая зависимость.

The documentation about it is quite good.

documentation about how to use registration API должен помочь вам разобраться.

ТЛ; др asnwer является: так ConstructorInjectedComponent зависит от IMyComponent убедитесь, что вы регистрируетесь AMyComponent выставить IMyComponent как сервис.

_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>()); 
Смежные вопросы