C# 减少项目依赖性

C# 减少项目依赖性,c#,mvvm,C#,Mvvm,我对我的项目设置不是很满意,所以我希望你能给我一些改进的建议 我现在的空白解决方案中有以下项目: * Model (Portable Class Library) * ViewModel (Portable Class Library) * DataAccess (Class Library) because of using Entity Framework 6 * App.WPF (WPF-Application for Desktop) 在我的DataAccess项目中,我有一个接口“I

我对我的项目设置不是很满意,所以我希望你能给我一些改进的建议

我现在的空白解决方案中有以下项目:

* Model (Portable Class Library)
* ViewModel (Portable Class Library)
* DataAccess (Class Library) because of using Entity Framework 6
* App.WPF (WPF-Application for Desktop)
在我的DataAccess项目中,我有一个接口“IRepository”和一个实现“EFRepo”,它实现了“IRepository”。我的“PersonViewModel”-ViewModel项目中的类通过构造函数依赖项注入获得数据访问:

public  PersonViewModel(IRepository dal){...}
如果我想在“App.WPF”项目中实例化DataContext:

public MainWindow()
{
    InitializeComponent();
    DataContext = new PersonViewModel();
}
“App.WPF”中的我的主窗口需要引用以下项目:

* Model
* ViewModel
* DataAccess
我认为这太过分了。视图(App.WPF)应该只知道ViewModel,对吗?我怎样才能做到这一点

我曾尝试创建一个名为接口的“共享项目”和另一个名为“实现”的类库,我在其中放置了
eRefo
实现
IRepository
。但是我必须使我的
DataContext
DataAccess
项目公开,类库“实现”也必须引用
Entity.dll

因此,总的来说,我对如何以一种可接受的方式处理它感到困惑。我想将ViewModel用作桌面(WPF)、Silverlight和Windows Phone应用程序用于教育目的,这就是为什么我尝试保持一切独立的原因


我使用Visual Studio 2015 Community Edition

这可能是EF的常见问题(它会泄漏)-您不需要下面的DataAccess部分-将接口放在模型之外,您可能可以将viewmodels放在UI(WPF应用程序)中所以DA->Model->WPF-有一种方法可以将EF模型与上下文分开,但我真的非常不喜欢它,以至于我编写了模型,并在存储库模式的实现中进行转换,而不是Carsten,如果我将ViewModels放在应用程序中,WPF会起作用,但是如果我需要silverlight或windows phone应用程序中的viewModels,我该怎么办呢?如果你以后选择这样做,我想你可以再次重构它们。。。很抱歉,我错过了这一部分,但这并不是那么重要——如果你愿意,在他们自己的项目中重构它们就像你说的:“在他们自己的项目中重构它们”:所以如果我知道我需要它们用于单独的项目,并且可以像我所做的那样将它们写入我自己的名为“ViewModels”的项目中。。。还是我误解了你?那么你的问题到底是什么?或者你只是想听听意见(遗憾的是,这不是征求意见的好地方)