Замок Виндзор: настроить универсальный сервис и обеспечить неуниверсальную реализацию не удается - PullRequest
0 голосов
/ 20 мая 2010

Используя 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? Я рад реализовать средство для поддержки этого, если это то, что нужно.

1 Ответ

1 голос
/ 20 мая 2010

Будет ли это работать, если вы измените строку в ConfigureContainer на эту?

container.AddComponent("entity", typeof(IEntity<string>), typeof(ConcreteEntity));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...