2012-11-16 29 views
0

我正在爲多個客戶端創建一個應用程序,每個客戶端的實現之間有相似之處和不同之處。我爲ORM的UI和實體框架使用了Win Forms和WPF的組合。我需要的是儘可能重用共享組件的能力。針對多個客戶端的多個項目的方法

其中的一個關鍵問題是,一個客戶的數據庫是Oracle,另一個是MS SQL,現在我有兩個工作,但只能通過改變在編譯時元素。這意味着我必須有兩套幾乎完全相同的項目,只是略有不同的數據項目。如果在一個UI中發現錯誤,我必須打開另一個解決方案並在那裏編輯它。

我在之前的項目中使用過Ninject,儘管可能會以某種方式顛倒Data項目的控制權,將特定的項目/類注入到UI中,而不是直接調用它們的UI。

,我似乎無法弄清楚的問題是如何注入整個項目。我希望能夠在UI db.Customers.ToList();中說出並讓它從我注入的任何數據項目中返回客戶。這兩個客戶端的數據庫模型在這一點上是相同的,儘管他們將來可能會改變。

我敢肯定,必須有一個可以讓我在一個共享能力使用這些資源的模式。

謝謝

+0

您不應該將客戶項目拆分爲不同的解決方案嗎?您是否嘗試過將沒有客戶端特定內容的「核心」解決方案製作成類庫(或庫),然後製作客戶端解決方案並引用這些DLL? –

回答

0

在什麼時候可以決定需要哪種連接類型?

這可能是非常幼稚的,但不能你只需要使用一個應用程序設置火起來,在運行時適當類型的連接工廠或倉庫的?其中最簡單的版本:

public class MainWindow : Window 
{ 
    private IRepository _repo; 

    public MainWindow() 
    { 
     _repo = ServiceLocator.GetRepo();  
    } 
} 


public class ServiceLocator 
{ 
    public static IRepository GetRepo() 
    { 
     var typeOfDb = AppSettings["TypeOfDb"] 

     if(typeOfDb == "Oracle") 
      return new OracleRepo(); 
     else 
      return new SqlServerRepo(); 
    } 
} 

這項工作?或者我完全錯過了這一點?