Используя 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 is
не GenericTypeDefinition.
MakeGenericType может быть вызван только на
тип для которого
Type.IsGenericTypeDefinition имеет значение true.
Теперь я нашел пост здесь , описывающий ту же проблему. Постер описывает, как это можно решить, изменив метод DefaultGenericHandler.ResolveCore. Однако мне не хочется менять сам код Замка и запускать его на собственной сборке.
Кто-нибудь знает, как я могу решить эту проблему без изменения исходного кода Castle Windsor? Я рад реализовать средство для поддержки этого, если это то, что нужно.