C# Castle Windsor:配置通用服务并提供非通用实现失败
使用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
[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
,因此您应该注册它,因为您链接到的帖子是错误的,它提出了一种解决方法,而不是修复方法。温莎是对的,你的注册是错的。