dependency-injection - 如何在 xamarin 形式的 Dependeny 注入中重新初始化视图模型的对象?
问题描述
我在我的 xamarin 表单项目中使用 Autofac 依赖注入。我创建了一个构造函数及其视图模型。然后将其注册到 Autofac 的容器中。起初它工作正常。但是当用户进入页面时,它显示的值与我上次在属性中保存的值相同。我想重新初始化视图模型的对象。这是我的代码:
界面:
public ILoadViewModel : INotifyPropertyChanged
{
}
视图模型:
public class LoadViewModel : ViewModelBase, ILoadViewModel
{
private INavigationService navigationService;
public string Username { get ; set ; }
public LoadRouteViewModel(INavigationService navigationService)
{
this.navigationService = navigationService;
}
Xaml.cs:
viewModel = AppContainer.Container.Resolve<ILoadViewModel>();
首先它初始化视图模型。但是当我下次打开页面时。它显示了我上次存储的相同用户名值。
我怎样才能重新初始化它。
解决方案
取决于如何向您ViewModel
注册Autofac
可能会遇到不同的结果。如果您将范围定义为SingleInstance()
(单实例范围),则容器将在每个Resolve
. 如果您的意图是在每个(每个依赖范围)上获取一个新实例Resolve
,则不应定义任何生命周期范围,因此只需删除.SingleInstance()
:
builder.RegisterType<LoadRouteViewModel>().As<ILoadRouteViewModel>();
您可以在此处阅读有关生命周期范围的更多信息。
PS:除此之外,将注入的实例标记为readonly
.
推荐阅读
- c# - Why undo Drawline() in my opinion is not work?
- kernel - Freebsd 11.1 - 我添加了自己的 sysctl - 但它没有被 sysctl -a 命令列出,手动调用时没有显示任何值,我无法更改它的值
- python - re.findall 生成意外的额外空格
- php - 显示特定 WooCommerce 类别的列表
- typescript - 离子显示网页
- c++ - Best way to keep a collection of timers (object vs pointer)
- mongodb - Mongoose 10 毫秒查询本地主机上的单个小文档?
- javascript - Angular 6 CLI 向 app.modules.ts 添加新组件会导致白屏
- service - Can Ansible service-module be used for non-root daemons?
- javascript - 如何将 JavaScript 类转换为工厂函数