2009-10-28 27 views
2

讓我清楚我的問題,我有說100班所有這些100類實現1個接口說IDependency,說想我的類名是客戶它實現IDependency統一框架

public class Customer : IDependency 
public class Order:IDependency 

如此下去,直到100班

而且我註冊這個類在web.config中像

<type type="IDependency" mapTo="Customer"></type> 
<type type="IDependency" mapTo="Order"></type> 

這將是錯誤的,因爲我得到錯誤IDependency已經declar ED

現在我需要的是應該只有1 web.config行,我應該能夠解決我的所有類和我不想RegisterType在我的代碼一樣

Container.RegisterType<IDependency,Customer>(); 
Container.RegisterType<IDependency,Order>(); 

我不想在我的代碼文件中寫這些行,要求就像所有這些都應該通過配置文件來完成。

你們是否認爲這是有效的,如果是的話,你是否至少可以讓我知道如何處理它。

總的來說,我覺得是應該有1班說BaseClass它首先實現我的IDependency接口和我所有的100類將繼承類和我的配置文件就應該像

<type type="IDependency" mapTo="BaseClass"></type> 

請讓我知道如果你需要更多的解釋,因爲我真的受到了這個衝擊

回答

4

你不能同時爲兩個類註冊同一個接口。在您的代碼示例:

Container.RegisterType<IDependency,Customer>(); 
Container.RegisterType<IDependency,Order>(); 

什麼團結容器將要做的就是註冊Order作爲類當你調用Resolve<IDependency>,而忘記了以前的Customer類註冊返回。

無論如何,我不太明白哪個是你的目標。如果你可以爲同一個接口註冊多個類,那麼當調用Resolve<IDependency>時你期望獲得什麼,或者你期望在構造函數中有一個IDependency參數的類接收什麼?基於澄清DOTNET編碼器

編輯

如果你想要的是你要根據配置寄存器,類運行時來決定,你可以在配置文件中的一個值(web.config中,設置等),告訴你想要關聯哪個類。例如:

string className = Settings.Default["IDependencyClassName"]; //just an example, can use web.config or other config system as well 
Container.RegisterType(typeof(IDependency), Type.GetType(className)); 
+0

但在配置文件,如果我有100個類我必須寫100條映射線右像<型類型=「IDependency」 mapTo =「客戶」>和<型類型=「IDependency」 mapTo =「Order」name =「Order」>我正在尋找一個解決方案,我的COnfig文件將只有1行 – 2009-10-28 08:10:47

+0

但是您同時只使用1個映射,對不對?然後,在配置文件中只有一行,並根據需要更改類名稱。 – Konamiman 2009-10-28 08:13:14

+0

我會澄清這裏的圖片我有一個項目,其中DAL基於實體框架和ADO都在單獨的DLL,我有我的DependencyModule具有IDependecy接口的單獨的DLL我的要求是通過評論或取消註釋1行我的DAL應該去ADO或EntityFramework我的EF和Ado有近100個類每個所以假設我使用我的實體框架現在所有類實現1接口IDependency我需要的是我可以輕鬆地調用客戶,訂單或Orderdetail的Enitity框架或ADO任何一個在這個時候 – 2009-10-28 08:19:42