Dependency injection 如何以xamarin形式在依赖注入中重新实现viewmodel的对象?

Dependency injection 如何以xamarin形式在依赖注入中重新实现viewmodel的对象?,dependency-injection,xamarin.forms,autofac,Dependency Injection,Xamarin.forms,Autofac,我在xamarin forms项目中使用Autofac dependecy注入。我创建了一个构造函数及其viewmodel。然后将其注册到Autofac的容器中。一开始它工作正常。但当用户出现在页面上时,它显示的值与我上次在属性中保存的值相同。我想重新初始化viewmodel的对象。这是我的密码: 接口: public ILoadViewModel : INotifyPropertyChanged { } 视图模型: public class LoadV

我在xamarin forms项目中使用Autofac dependecy注入。我创建了一个构造函数及其viewmodel。然后将其注册到Autofac的容器中。一开始它工作正常。但当用户出现在页面上时,它显示的值与我上次在属性中保存的值相同。我想重新初始化viewmodel的对象。这是我的密码:

接口:

     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=AppContainer.Container.Resolve();
首先,它初始化viewmodel。但是当我下次打开页面时。它显示的用户名值与我上次存储的用户名值相同


我怎样才能使它重新复活

取决于
ViewModel
如何在
Autofac
注册,您可能会遇到不同的结果。如果将作用域定义为
SingleInstance()
(单实例作用域),则容器将在每个
resolve
上解析相同的实例。如果您的目的是在每个
解析
(每个依赖项范围)上获得一个新实例,则不应定义任何生存期范围,因此只需删除
.SingleInstance()

builder.RegisterType().As();
您可以阅读有关生存期作用域的更多信息


注意:除此之外,将注入实例标记为
只读

是一种很好的做法,这取决于
ViewModel
如何在
Autofac
中注册。您可能会遇到不同的结果。如果将作用域定义为
SingleInstance()
(单实例作用域),则容器将在每个
resolve
上解析相同的实例。如果您的目的是在每个
解析
(每个依赖项范围)上获得一个新实例,则不应定义任何生存期范围,因此只需删除
.SingleInstance()

builder.RegisterType().As();
您可以阅读有关生存期作用域的更多信息


注意:除此之外,将注入的实例标记为默认情况下不应发生的
只读

是一种好的做法。您是如何在Autofac?builder.RegisterType().As()中注册ViewModel的。SingleInstance();我发布了一个答案,如果你觉得有帮助,请接受并投票。默认情况下不应该发生这种情况。您是如何在Autofac?builder.RegisterType().As()中注册ViewModel的。SingleInstance();我贴了一个答案,如果你觉得有帮助,请接受并投票。
builder.RegisterType<LoadRouteViewModel>().As<ILoadRouteViewModel>();