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

时间:2010-05-20 17:32:53

标签: c# generics castle-windsor

使用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> {}

此测试失败,但出现以下异常:

  

System.InvalidOperationException:   WindsorGenericsTest.ConcreteEntity是   不是GenericTypeDefinition。   MakeGenericType只能被调用   一种类型   Type.IsGenericTypeDefinition为true。

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

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

1 个答案:

答案 0 :(得分:1)

如果将ConfigureContainer中的行更改为此文件,它会起作用吗?

container.AddComponent("entity", typeof(IEntity<string>), typeof(ConcreteEntity));