2010-12-10 81 views
0

那麼,問題:溫莎城堡能夠解決逆變類型嗎?

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

。不是嗎? – 2010-12-10 23:09:05

回答

1

你懶:對

我跑了下面的測試,它如果您正在使用最新版本和.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 2010-12-12 09:03:57