Как вы используете Castle Windsor - Fluent Interface для регистрации универсальных интерфейсов? - PullRequest
8 голосов
/ 05 июня 2011

Castle Windsor только что выпустил интерфейс Fluent для регистрации компонентов в качестве альтернативы использованию XML в файле конфигурации.Как использовать этот интерфейс Fluent для регистрации универсального интерфейса ?

Для иллюстрации у меня есть:

public interface IFoo<T,U>
{    
  public T IToo();   
  public U ISeeU(); 
}

, который реализован некоторым классом, называемым Foo .Теперь, если я хочу зарегистрировать это, я делаю что-то вроде ...

var _container = new WindsorContainer();
_container.Register(...);

Как мне пройти регистрацию с этим ?Процедура выполнения неуниверсального интерфейса не работает.

Ответы [ 2 ]

15 голосов
/ 05 июня 2011

Как-то так?

   container.Register(AllTypes.FromAssemblyContaining<YourClass>()
        .BasedOn(typeof(IFoo<,>))
        .WithService.AllInterfaces()
        .Configure(c => c.LifeStyle.Transient));

интерфейс

 public interface IFoo<T, U>
{
    T IToo();
    U ISeeU();
}
4 голосов
/ 05 июня 2011

В вашем вопросе неясно, нужно ли сопоставлять открытый универсальный интерфейс IFoo<T,U> с одной или несколькими реализациями, каждая из которых реализует закрытую версию этого интерфейса (регистрация пакета), или вы хотите сопоставить открытый универсальный интерфейс соткрытая универсальная реализация.

Danyolgiax привел пример регистрации партии.Сопоставление открытого универсального интерфейса с открытой универсальной реализацией дает возможность запрашивать закрытую версию этого интерфейса и возвращать закрытую версию указанной реализации.Регистрация для сопоставления открытого универсального типа обычно выглядит следующим образом:

container.Register(Component
    .For(typeof(IFoo<,>))
    .ImplementedBy(typeof(Foo<,>)));

Вы можете решить это следующим образом:

var foo1 = container.Resolve<IFoo<int, double>>();
object foo2 = container.Resolve(typeof(IFoo<string, object>));

Как видите, вы можете разрешить любой закрытыйверсия открытого универсального интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...