针对多个客户的多个项目的方法

时间:2012-11-16 13:53:32

标签: .net entity-framework repository

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

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

我在之前的项目中使用了Ninject,虽然它可能以某种方式反转Data项目的控件,将特定的项目/类注入UI,而不是直接调用它们的UI。

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

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

由于

1 个答案:

答案 0 :(得分: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();
    }
}

这会有用吗?或者我完全错过了这一点?