2012-11-16 31 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(); 
    } 
} 

这项工作?或者我完全错过了这一点?