c# - 将组件列表解析为构造函数参数

标签 c# dependency-injection castle-windsor

假设我有一个定义格式化报告的界面:

public interface IFormatter 
{
    string Name {get;}
    Report Format(InputData data);
}

以及一个为我格式化报告的提供程序的实现:

public FormatterProvider : IFormatterProvider
{
    private readonly IList<IFormatter> _formatter;

public FormatterProvider(IList<IFormatter> formatters)
{
    _formatters = formatters;
}

    public IFormatter GetFormatter(string name){ return _formatters.Where(x => x.Name == name); }
}

我知道我可以使用此注册来注册程序集中的所有格式化程序:

container.Register(
    AllTypes.FromAssemblyName("MyCompany.Formatters")
        .BasedOn<IFormatter>()
        .WithService
        .FromInterface()
    );

但是,如何注册提供程序,以便将容器中注册的任何格式化程序传递给其构造函数?

最佳答案

使用名为 CollectionResolver 的子解析器。

Container.Kernel.Resolver.AddSubResolver(new CollectionResolver(Container.Kernel, true));

我认为您需要将 IList 更改为 IEnumerable 才能完成这项工作,但不确定。

关于c# - 将组件列表解析为构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6656361/

相关文章:

c# - Stripe webhook 签名失败 - Stripe.net

c# - 如何在 MVC 中的 @Html.ActionLink 中获取更新的文本框更改值

C# ISynchronizeInvoke 问题

ios - 如何修改依赖注入(inject)模式中的对象

dependency-injection - 在Windsor中注册组件不指定接口(interface)可以吗?

c# - 使用 Windsor 注册特定程序集和命名空间中的所有服务?

c# - 单元测试 IHttpActionResult Controller - 200 OK 测试失败

java - 使用 Vaadin 和 Spring Boot 实现依赖注入(inject)的良好实践

C# Azure Function v3 依赖注入(inject) - 使用 Scrutor 进行程序集扫描

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