0

我是 Windsor 的新手,正在尝试实现最基本的构造函数注入。显然,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 因为它具有需要满足的依赖项。

所以我尝试为 ConstructorInjectedComponent 传递一个依赖项的 IDictionary ...这就是文档让我失败的地方。

我不知道如何定义该字典。我找不到任何解释它的文档。我试过这个:

var d = new Dictionary<string, string>() {{"IMyComponent", "AMyComponent"}};
_container.Register(Component.For(typeof(ConstructorInjectedComponent))
                    .DependsOn(dependencies));

但这会失败并出现相同的“具有需要解决的依赖项”错误。

我究竟做错了什么?

4

1 回答 1

6

首先,确保您了解基本概念至关重要,即什么是组件、什么是服务以及什么是依赖项。

关于它的文档非常好

有关如何使用注册 API的文档应该可以帮助您入门。

tl;dr asnwer 是:因为ConstructorInjectedComponent取决于IMyComponent确保您注册AMyComponent以公开 IMyComponent为服务

_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>());
于 2012-05-11T03:32:29.520 回答