C# Castle Windsor:配置通用服务并提供非通用实现失败

C# Castle Windsor:配置通用服务并提供非通用实现失败,c#,generics,castle-windsor,C#,Generics,Castle Windsor,使用Castle Windsor,我想用一个类型参数配置一个通用服务;并让它由一个已知的具体类型实现,该类型使用特定类型作为泛型参数来实现服务。以单元测试的形式表示,我希望实现以下功能: [TestClass] public class WindsorTests { [TestMethod] public void ResolveGenericEntity_Test() { WindsorContainer container = ConfigureCon

使用Castle Windsor,我想用一个类型参数配置一个通用服务;并让它由一个已知的具体类型实现,该类型使用特定类型作为泛型参数来实现服务。以单元测试的形式表示,我希望实现以下功能:

[TestClass]
public class WindsorTests
{
    [TestMethod]
    public void ResolveGenericEntity_Test()
    {
        WindsorContainer container = ConfigureContainer();
        IEntity<string> entity = container.Resolve<IEntity<string>>();
        Assert.IsNotNull(entity);
    }

    private WindsorContainer ConfigureContainer()
    {
        WindsorContainer container = new WindsorContainer();
        container.AddComponent("entity", typeof(IEntity<>), typeof(ConcreteEntity));
        return container;
    }
}

public interface IEntity<T> { }

public class ConcreteEntity : IEntity<string> {}
[TestClass]
公共级WindsorTests
{
[测试方法]
public void ResolveGenericEntity_Test()
{
WindsorContainer容器=配置容器();
entity实体=container.Resolve();
Assert.IsNotNull(实体);
}
专用WindsorContainer配置容器()
{
WindsorContainer容器=新WindsorContainer();
container.AddComponent(“实体”、类型(entity)、类型(ConcreteEntity));
返回容器;
}
}
公共接口属性{}
公共类ConcreteEntity:Entity{}
此测试失败,出现以下异常:

System.InvalidOperationException: WindOrgenericsTest.ConcreteEntity为 不是泛型定义。 只能在上调用MakeGenericType 一种 Type.IsGenericTypeDefinition为true

现在,我找到了一个描述相同问题的方法。海报描述了如何通过更改DefaultGenericHandler.ResolveCore方法来解决此问题。但是,我不想更改Castle代码本身并在自定义构建上运行


有人知道我如何在不修改Castle Windsor源代码的情况下解决这个问题吗?如果需要的话,我很乐意实施一个设施来支持这一点

如果将ConfigureContainer中的行更改为该行,它会工作吗

container.AddComponent("entity", typeof(IEntity<string>), typeof(ConcreteEntity));
container.AddComponent(“实体”、typeof(IEntity)、typeof(ConcreteEntity));

可以,但这不是我所需要的(具体用法是在一个相当复杂的注入对象图中,我的代码示例是重现问题的最短示例)。那么您需要什么?这个答案正是问题的正确解决方案-您的
ConcreteEntity
实现了
IEntity
而不是
IEntity
,因此您应该注册它,因为您链接到的帖子是错误的,它提出了一种解决方法,而不是修复方法。温莎是对的,你的注册是错的。