使用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源代码的情况下解决此问题?如果需要的话,我很乐意实施一个支持这个的设施。
答案 0 :(得分:1)
如果将ConfigureContainer中的行更改为此文件,它会起作用吗?
container.AddComponent("entity", typeof(IEntity<string>), typeof(ConcreteEntity));