我是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));
但是失败了同样的“具有需要解决的依赖性”错误。
我做错了什么?
答案 0 :(得分:6)
首先,确保您了解基本概念至关重要,即组件是什么,服务是什么以及依赖是什么。
The documentation about it is quite good
documentation about how to use registration API应该可以帮助你开始。
tl; dr asnwer是:,因为ConstructorInjectedComponent
取决于IMyComponent
,请确保您注册AMyComponent
以公开IMyComponent
作为服务。
_container.Register(Component.For<IMyComponent>().ImplementedBy<AMyComponent>());