C# 如何清理通过DependencyInjection创建的viewmodel?
使用Ninject和MVVMLight。使用与viewmodel的TransientScope绑定 视图消失后,viewmodel将退出范围 清理viewmodel的触发器是什么…我有一些已注册的事件需要注销 我可以在view unloaded事件上使用EventToCommand,但我想学习如何使用Ninject MVVMLight方法:)我在任何地方都找不到任何示例,包括文档 视图模型定位器C# 如何清理通过DependencyInjection创建的viewmodel?,c#,ninject,mvvm-light,C#,Ninject,Mvvm Light,使用Ninject和MVVMLight。使用与viewmodel的TransientScope绑定 视图消失后,viewmodel将退出范围 清理viewmodel的触发器是什么…我有一些已注册的事件需要注销 我可以在view unloaded事件上使用EventToCommand,但我想学习如何使用Ninject MVVMLight方法:)我在任何地方都找不到任何示例,包括文档 视图模型定位器 public class ViewModelLocator { //CONSTRU
public class ViewModelLocator
{
//CONSTRUCTOR
static ViewModelLocator()
{
Kernel = new StandardKernel(new DataViewsModule());
}
//PRIVATE FIELDS
private static IKernel Kernel;
//PUBLIC PROPERTIES
public LiveDataViewModel LiveDataViewModel { get { return Kernel.Get<LiveDataViewModel>(); } }
/// <summary>
/// Cleans up all the resources.
/// </summary>
public static void Cleanup()
{
}
}
下面是调用ViewModelLocator清理方法的视图的卸载事件。如何清理此瞬态viewmodel?当对象绑定到TransientScope中时,这意味着它仅在需要时由Ninject激活,但Ninject不再跟踪该对象,因此由您来进行清理 我建议创建一些自定义范围,并使您的viewmodel
IDisposable
。Ninject将在作用域的和处对该对象调用Dispose()。让包含一些资源的对象实现IDisposable
是一种很好的做法,这样它们在工作完成后会自行清理
还要看看这个有趣的Ninject扩展:。它提供了一些额外的作用域实现。我建议您可以尝试InParentScope()
class DataViewsModule : NinjectModule
{
public override void Load()
{
//View Models
Bind<DataViewsViewModel>().ToSelf().InSingletonScope();
Bind<LiveDataViewModel>().ToSelf().InTransientScope();
}
}
public LiveDataView()
{
InitializeComponent();
Unloaded += (s, e) => ViewModelLocator.Cleanup();
}