2010-12-10 1 views
0

그래서, 문제 :캐슬 윈저는 반동적 인 제네릭을 해결할 수 있습니까?

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

그래서 나는 둘 다 구현을 얻을 수 :

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

는이 같은 윈저 작업을 할 수 있습니까?

+0

를 전달합니다. 그렇지 않니? –

답변

1

당신은 게으른 : P

나는 다음과 같은 테스트를 실행하고 당신은 내가이 일을해야한다고 생각 최신 버전 및 .NET 4 빌드를 사용하는 경우는

[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

관련 문제