.net - CaSTLe Windsor 将命名组件映射到特定属性

标签 .net castle-windsor ioc-container

以下场景:

我们使用 Fluent API 来注册程序集中的所有组件以及具有命名键的两个组件 typeof(A)。另一个具有两个属性 typeof(A) 的类 B 应该获得注入(inject)的命名组件。

示例:

public class A : IA {}

public class B : IB
{
    [Named("first")]
    public IA First { get; set; }

    [Named("second")]
    public IA Second { get; set; }
}

// ...

container.Register(Component.For<IA>().Instance(new A(value1)).Named("first"));
container.Register(Component.For<IA>().Instance(new A(value2)).Named("second"));

// ...
var b = container.Resolve<IB>(); // named instances of A get injected to B using the Named attribute

这可以通过 Named 这样的属性实现还是仅通过 Xml Config 实现?

最佳答案

在 Windsor 中执行此操作的标准方法是使用 service overrides 。在您的示例中,当您注册 B 时,您将这样做:

container.Register(Component.For<IB>().ImplementedBy<B>()
                     .ServiceOverrides(new {First = "first", Second = "second"}));

(还有其他方式来表达这一点,请检查链接的文档)

按照您的建议使用 Named 属性会因不相关的问题而污染代码(B 不应该关心注入(inject)的 A 内容)

关于.net - CaSTLe Windsor 将命名组件映射到特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5030431/

相关文章:

c# - Unity IOC 使用InjectionConstructor 简化类型注册

java - 如何从静态内部类构造函数创建 Spring bean?

c# - XML 序列化 - 构建某种类型的子元素列表

caSTLe-windsor - Envers 自定义修订监听器内的 Windsor 'Scope cache was already disposed'

c# - 无法解析 Web Api Controller 中的依赖项

inversion-of-control - 在 Unity 中检测循环依赖的原因

c# - 防止简单注入(inject)器在解析未注册服务时抛出异常

c# - 如何确定哪些逻辑核心共享同一个物理核心?

javascript - 如何使用相应的currentItemId获取元素的值

.net - 我可以使用数据注释通过 Entity Framework 4.1 RC 执行级联删除吗?