2010-12-10 2 views
0

Итак, проблема:Is Castle Windsor способен решать контравариантные дженерики?

interface IControl<in T> where T : Base 
{ 
    void Execute(T item); 
} 


class ControlDerived : IControl<Derived> 
{ 
    public void Execute(Derived item) 
    { 
    } 
} 

class ControlBase : IControl<Base> 
{ 
    public void Execute(Base item) 
    { 
    } 
} 

class Derived : Base 
{ 
} 

Можно ли сделать Виндзорский работу так:

var ctls = container.ResolveAll<IControl<Derived>>() 
ctls.Lenght == 2 ? 

Так что я мог бы получить обе реализации?

+0

Если вы используете последнюю версию и .NET 4 сборки я думаю, что это должно работать. Не так ли? – 2010-12-10 23:09:05

ответ

1

Вы ленивы: р

Я побежал следующий тест, и он проходит

[Test] 
public void ResolveAll_can_resolve_contravariant_components() 
{ 
Container.Register(Component.For<IAmContravariant<Base>>().ImplementedBy<ContravariantBase>(), 
       Component.For<IAmContravariant<Derived>>().ImplementedBy<ContravariantDerived>()); 

var all= Container.ResolveAll<IAmContravariant<Derived>>(); 
Assert.AreEqual(2, all.Length); 
} 
+0

Спасибо, похоже, у меня некорректная конфигурация. – xumix 2010-12-12 09:03:57

Смежные вопросы