MVVM将如何影响我对域上下文的访问?

时间:2011-01-26 19:41:24

标签: silverlight mvvm wcf-ria-services

我正在考虑使用我在Silverlight / C#/ RIA Services中编写的应用程序,并通过在MVVM中进行测试来使其更加强大。我的问题是:为了使表单更容易添加/删除/更新项目,我在一个名为DomainService.xaml的文件中创建了一个静态资源,所有ria服务查询都基于该文件。

<ds:MyDomainContext x:Key="MyDomainContext" />

这允许我使用相同的上下文来获取所有查询,这样我就不会得到关于实体被附加到一个上下文并且受到在同一实体上工作的另一个上下文的影响的错误。我的DomainDataSources最终看起来像这样:

<riaControls:DomainDataSource AutoLoad="True" Name="discountsDataSource" LoadSize="10" DomainContext="{StaticResource MyDomainContext}" QueryName="GetDiscounts" />

这种做法似乎运作得相当好。但我在MVVM世界中没有看到类似的东西。 MVVM应用程序的数据层如何保持所有上下文的直接性?我是否仍然可以像以前一样轻松使用数据访问器,或者是否需要输入大量的管道代码才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

我建议使用Depndency Injection / IoC容器来管理对象。我个人认为Unity非常适合这个目的。您只需要告诉容器使用生命周期管理器来保存单个对象,然后在每个类中使用UnityContainer请求该对象。

Unity代表:

// Upon creation of the container
IUnityContainer container = new UnityContainer();
container.RegisterType<MyDomainContext>(new ContainerLifetimeManager());

// In your individual model classes
container.Resolve<MyDomainContext>();

只要在类之间传递容器(如果使用容器构造所有模型对象,这很容易),那么resolve将始终返回您请求的相同上下文。