视图模型应该如何与存储库通信?

时间:2011-02-15 20:56:12

标签: c# repository viewmodel mvvm

我有一堆repositoiries。他们从EF 3.5生成的模型中检索数据。为了简单起见,我们只需要将它们称为repository1,2和3.它们都实现了通用接口:public interface IRepository<T>{..}我的视图模型应该如何与theese存储库进行通信?我尝试使用IRepository GetRepository(string repositoryName){..}方法创建某种工厂,但我无法让它工作。那么我应该在需要时只在视图模型中引用存储库,还是有更好的解决方案呢?我更喜欢代码示例,谢谢。

欢呼

4 个答案:

答案 0 :(得分:1)

These answers和来自free introduction-chapterDependency Injection in .NET建议将存储库和ui与businesslogic分开。依赖性应该像这样强调核心逻辑:

dal / repositories - &gt; Businesslayer,Models和IRepository&lt; - UI

我也想知道ViewModel在哪里适合这个。它们应该完全没有连接到存储库,但是ViewModel是属于业务层(servicelayer)还是属于UI似乎是值得商榷的。我只是盯着asp.net mvc并且目前最喜欢将它们与业务层放在一起以保持控制器的简单性。此外,业务层从逻辑上属于一起的各种存储库收集项目并通过ViewModel一起执行操作似乎也是合理的。也许作为一个事务,所以对所有存储库的更新必须成功或回滚。

答案 1 :(得分:0)

我无法想象您的视图模型应该与您的存储库进行通信的情况。 ViewModel应该是客户端使用的平面模型。

你究竟想做什么?

答案 2 :(得分:0)

您可能会发现 WPF Application Framework (WAF) BookLibrary 示例应用程序很有趣。它将实体框架与MVVM一起使用。但它没有引入存储库来使用实体框架。

答案 3 :(得分:-2)

存储库提供T。我所做的是为我的T添加一个静态属性以通过IOC获取存储:

public class Part // This is one kind of T
{
    public static IRepository<Part> Repository { get { return IoC.GetInstance<IRepository<Part>>(); } }
    ...
}

然后我需要一个零件......

var part = Part.Repository.Find(id);

对于我的单元测试,IoC提供了模拟存储库。在生产中,真实的东西。