Dependency injection 如何以xamarin形式在依赖注入中重新实现viewmodel的对象?
我在xamarin forms项目中使用Autofac dependecy注入。我创建了一个构造函数及其viewmodel。然后将其注册到Autofac的容器中。一开始它工作正常。但当用户出现在页面上时,它显示的值与我上次在属性中保存的值相同。我想重新初始化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
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>();