Caliburn.Micro 和 Linq-to-SQL 如何协同工作
How does Caliburn.Micro and Linq-to-SQL work together
我正在使用 Caliburn.Micro,想知道是否有任何约定或惯例可以使用数据库和实体。我将所有数据库创建的东西放在我的 AppDataContext
中,它继承自 DataContext
。然后我在 AppBootstrapper
中添加了一个 container.Singleton<AppDataContext>();
并将 AppDataContext
注入到我的 ViewModel 构造函数中。
这很好用,但我不确定它是否正确?
另一个问题是当一个新实体被插入到我的 AddItemPage
的数据库中时如何更新我的 MainPage
。当我导航回 MainPage
时,是否应该始终从数据库加载数据?或者我应该通过 IoC.Get<MainPageViewModel>();
加载 MainViewModel 并在 AddItemViewModel 中手动插入实体?
我确定有很多选择,但我正在寻找预期的方式。
在 DI 容器中将 DataContext
注册为单例,然后通过构造函数注入在 ViewModel 中使用它似乎是一个不错的选择。
使用IoC.Get
不是一个好主意,它实际上是服务定位器反模式。另一个问题是,如果您使用 .PerRequest<>
注册您的 ViewModel(没有理由让它们成为单例),您的解决方案将不起作用,因为 IoC.Get
将 return 您的 ViewModel 的不同实例.
实现用例的正确方法是使用消息传递(在 Caliburn 中使用 IEventAggregator
)。如果用户添加了一个新项目,您发送的消息将被您的 MainViewModel 捕获(不要忘记为消息注册)。然后您的 MainViewModel 可以重新加载所有数据,或者消息可能包含新记录的 Id,ViewModel 将只加载新记录并添加到 UI.
有关 Caliburn 消息传递的详细信息,请参阅 http://wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-messaging/
我正在使用 Caliburn.Micro,想知道是否有任何约定或惯例可以使用数据库和实体。我将所有数据库创建的东西放在我的 AppDataContext
中,它继承自 DataContext
。然后我在 AppBootstrapper
中添加了一个 container.Singleton<AppDataContext>();
并将 AppDataContext
注入到我的 ViewModel 构造函数中。
这很好用,但我不确定它是否正确?
另一个问题是当一个新实体被插入到我的 AddItemPage
的数据库中时如何更新我的 MainPage
。当我导航回 MainPage
时,是否应该始终从数据库加载数据?或者我应该通过 IoC.Get<MainPageViewModel>();
加载 MainViewModel 并在 AddItemViewModel 中手动插入实体?
我确定有很多选择,但我正在寻找预期的方式。
在 DI 容器中将 DataContext
注册为单例,然后通过构造函数注入在 ViewModel 中使用它似乎是一个不错的选择。
使用IoC.Get
不是一个好主意,它实际上是服务定位器反模式。另一个问题是,如果您使用 .PerRequest<>
注册您的 ViewModel(没有理由让它们成为单例),您的解决方案将不起作用,因为 IoC.Get
将 return 您的 ViewModel 的不同实例.
实现用例的正确方法是使用消息传递(在 Caliburn 中使用 IEventAggregator
)。如果用户添加了一个新项目,您发送的消息将被您的 MainViewModel 捕获(不要忘记为消息注册)。然后您的 MainViewModel 可以重新加载所有数据,或者消息可能包含新记录的 Id,ViewModel 将只加载新记录并添加到 UI.
有关 Caliburn 消息传递的详细信息,请参阅 http://wp.qmatteoq.com/first-steps-with-caliburn-micro-in-windows-phone-8-messaging/