我正在开发 WPF 中的食谱窗口应用程序,它由一个窗口和几个用户控件组成,这些用户控件使用来自 MVVM Light 的消息用 relayCommands 相互替换。
该应用程序使用从 entityFramework 生成的数据库。除了第一次执行文件之外,出现的问题是程序显示了许多警告和错误,例如:
Warning 1 Could not copy "...\cookbook\Cookbook.Services\Database1.mdf" to "bin\Debug\Database1.mdf". Beginning retry 1 in 1000ms. The process cannot access the file '...\cookbook\Cookbook.Services\Database1.mdf' because it is being used by another process. Cookbook.Services
在 ViewModelLocator 我有这个:
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainWindowViewModel>();
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<FoodTypeViewModel>();
SimpleIoc.Default.Register<ShoppingCartViewModel>();
SimpleIoc.Default.Register<MenuViewModel>();
SimpleIoc.Default.Register<MenuListViewModel>();
SimpleIoc.Default.Register<MenuCalendarViewModel>();
SimpleIoc.Default.Register<ChooseFoodWindowViewModel>();
}
我用来切换 userControls 的消息也在创建 ViewModels 的新实例,例如:
BackToMainCommand = new RelayCommand(() =>
{
Messenger.Default.Send<ViewModelBase>(new MainViewModel());
},
() => true);
我玩弄了 ViewModel 以使它们成为单例,以确保系统中只有单个副本,但 SimpleIoc 需要公共构造函数进行注册。而且我不知道这是否会帮助我解决问题。另外我没有告诉你的是 ViewModelLocator 仅在 xaml 中使用,所以我什至没有它的实例来清理这些东西。(我可能用错了,但我不知道应该怎么用)
问题是我不知道如何以及在哪里清理所有 ViewModel,因为它们是在我提到的许多地方创建的,其中一些可能保存 *.mdf 文件。