使用控制反转 (IOC) 和服务定位器模式来创建共享数据服务,它们也都在谈论。我注意到你的 mvvm-light 标签;我知道默认的 Mvvm-light 项目使用 ViewModelLocator 类和 SimpleIOC,因此您可以注册如下所示的数据服务。
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IDataService, DataService>();
}
}
使用了一个接口,因此我们可以随意更换 DataService,甚至可以在设计时使用不同的接口。因此,您将创建一个接口来定义您将使用的方法,并确保您的 DataService 实现它们。在您的 DataService 实现中,您将使用共享上下文/源。
public class DataService: IDataService
{
//USE SAME SOURCE (example EF)
private SharedSourceEntities context;
(blah blah)...
}
在您可以在构造函数或调用服务定位器中将其注入两个视图模型之后。
依赖注入:
public class ViewModelOne: ViewModelBase
{
private readonly IDataService dataService;
public ViewModelOne(IDataService dataService)
{
this.dataService = dataService;
}
}
public class ViewModelTwo: ViewModelBase
{
private readonly IDataService dataService;
public ViewModelTwo(IDataService dataService)
{
this.dataService = dataService;
}
}
服务地点:
SimpleIoc.Default.GetInstance<IDataService>();