2010-03-10 34 views
1

我對Unity相當陌生,(一般來說,IoC和DI),並且在配置它以供我使用時遇到問題。配置用於Inherted接口的Unity

我有兩個接口:

public interface ISample { ... } 

public interface IDerivedSample : ISample { ... } 

和simular到數concreate類:

public class UseSample : IDerivedSample { ... } 

我試圖配置統一解決這些時像這樣使用:

public class UsesSample 
{ 
    private ISample _sample; 

    public UsesSample(ISample sample) 
    { 
     _sample = sample; 
    } 
} 

我試圖讓這個配置失敗,所以我想我會問人羣如何這樣做。

編輯

我已經配置容器,找到不同版本的名字的接口,因此對於解決UserSample生成的代碼應該是simular到:

ISample = contianer.Resolve<ISample>("derived"); 

然而,失敗了。

+0

你能分享錯誤信息或以其他方式描述它是如何失敗的嗎?容器配置的複製也是有用的。 – 2010-03-10 16:53:23

回答

1

簡短的回答

container.RegisterType<ISample, UseSample>(); 

較長的答案

,如果你只從註冊ISample一個映射到具體的類上面的代碼工作。當我讀你的問題時,你有很多ISample的實現,在這種情況下ambiquity產生,因爲UsesSample沒有提供如何選擇合適的ISample實例。

這種難題有幾種方法。一些特定於DI容器(在本例中爲Unity),而另一些則通過創建較不明確的API設計來解決問題。例如,您可以使用Abstract Factory to select a dependency based on a run-time value