Может ли Виндзорский замок разрешать контравариантные дженерики? - PullRequest
0 голосов
/ 10 декабря 2010

Итак, проблема:

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 ?

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

1 Ответ

1 голос
/ 11 декабря 2010

Ты ленивый: p

Я запустил следующий тест, и он прошел

[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);
}
...