2017-02-06 182 views
2

我想使用Unity來解析抽象類。 抽象類具有某些泛型的實現。例如:解決基於泛型的抽象類

public abstract class Iface<S, T> where S : SomeClass where T : OtherClass 

public class face : Iface<SomeClassExample, OtherClassExample> 

然後我想執行:

UnityContainer.Resolve<Iface<SomeClassExample, OtherClassExample>>(); 

但它給出了錯誤的例外是:

出現InvalidOperationException - 抽象類的實例不能被創建。

這是顯而易見的,因爲我想創建一個抽象類。我希望Unity能夠聰明地找到基於泛型的特定課程。是可以做這樣的事情嗎?

+3

統一是一個依賴注入容器,而不是一個神奇的燈。例如通過反射註冊實現。 – Dbl

+0

是的,你需要在Unity中註冊'face',並在每次代碼請求'Iface 時告訴它使用'face'。 – Brandon

+0

如果你需要註冊face,那麼在這裏使用反射有什麼意義?我不妨稱呼新面孔(); – Wouter

回答

0

你需要明確註冊臉類並將其映射爲正確的泛型。

UnityContainer.RegisterType<Iface<SomeClassExample, OtherClassExample>, face>(); 

即使這樣,我相信它應該是可能的團結識別屬於自動某些仿製藥的正確類...

編輯: 有實際上是一個辦法!

UnityContainer.ConfigureAutoRegistration().Include(type => type.ImplementsOpenGeneric(typeof(Iface<,>)), Then.Register().AsFirstInterfaceOfType()).ApplyAutoRegistration(); 

它會自動註冊所有實現此基類的泛型派生類。

0

您需要明確要求它解決您的face類。只看該錯誤消息,它試圖創建的Iface<SomeClassExample, OtherClassExample>

UnityContainer.Resolve<face<SomeClassExample, OtherClassExample>>(); 

一個實例。如果你想使用IFACE作爲接口—創建一個接口,並將其註冊