0

我正在为多个客户端创建一个应用程序,其中每个客户端的实现之间既有相似之处,也有不同之处。我将 Win Forms 和 WPF 混合用于 UI 和 ORM 的实体框架。我需要的是尽可能重用共享组件的能力。

关键问题之一是一个客户端的数据库是 oracle,另一个是 MS Sql,现在我可以同时工作,但只能在编译时更改元素。这意味着我必须有两组几乎相同的项目,只是数据项目略有不同。如果在一个 UI 中发现错误,我必须打开另一个解决方案并在那里进行编辑。

我在以前的项目中使用过 Ninject,尽管可能会以某种方式反转 Data 项目的控制,将特定的项目/类注入 UI,而不是 UI 直接调用它们。

我似乎无法弄清楚的问题是如何注入整个项目。我希望能够在 UI 中说出来,db.Customers.ToList();并让它从我注入的任何数据项目中返回客户。这两个客户端的数据库模型在这一点上是相同的,尽管它们将来可能会改变。

我确信一定有一种模式可以让我以共享的身份使用这些资源。

谢谢

4

1 回答 1

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();
    }
}

这行得通吗?还是我完全错过了重点?

于 2012-11-20T20:17:15.287 回答