2010-12-10 33 views
0

Ainsi, le problème:Castle Windsor est-il capable de résoudre les génériques contravariants?

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 
{ 
} 

Est-il possible de faire du travail de Windsor comme ceci:

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

donc je pourrais obtenir les deux implémentations?

+0

suivante Si vous utilisez la dernière version et .NET 4 Je pense que cela devrait fonctionner. N'est-ce pas? –

Répondre

1

Vous êtes paresseux: p

J'ai couru le test et il passe

[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

Merci, on dirait que j'ai une mauvaise configuration. – xumix