小编Nei*_*ies的帖子

Castle Windsor 解决零个或多个实现

(稍微简化的场景以突出特定问题)。

我正在尝试使用 Castle Windsor 来解析一个组件,该组件具有一个带有单个参数的构造函数,该参数是一个服务接口数组:

public class TestClass<T>
{
    public TestClass(IService<T>[] services)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Windsor 容器配置为使用 ArrayResolver:

container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));
Run Code Online (Sandbox Code Playgroud)

这一切正常,并且为 T 的各种实例注入了一个或多个服务。

但是,对于某些 T,没有 的实现IService<T>。目标是使用零长度数组调用构造函数。

问题是,如果给定的 T 没有 IService 的具体实现,我如何注册没有实现的 IService 的定义,以便容器知道类型?

我目前使用:

container.Register(
    Classes.FromAssembly(Assembly.GetExecutingAssembly())
        .BasedOn<IService<>>()
        .WithService.FirstInterface());
Run Code Online (Sandbox Code Playgroud)

但由于这是由具体类驱动的,它显然没有注册任何“未使用”的 IService。

回退是为任何没有“真实”实现的 T 提供 IService 的存根实现,但我不想用许多这样的存根污染代码。(也可以通过带有一些反射的开放泛型提供......)。

c# castle-windsor

5
推荐指数
1
解决办法
385
查看次数

标签 统计

c# ×1

castle-windsor ×1