初始化对象并在模块之间共享
Initialize object and share it between modules
我有多个模块(每个模块都有自己的项目),我尝试在每个模块之间共享一个对象。
该对象在已初始化的 UserViewModel 模块上,但未在其他模块上(仅在 属性 更改触发器之后)。我用 EventAggregator 试过了,但它没有正确退出。我在这里错过了一些非常重要的东西。
public UserClass User
{
get { return _user; }
set { SetProperty(ref _user, value);}
}
First Module
public UserViewModel(IEventAggregator userEventAggregator,
UnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
User.PropertyChanged += UserOnPropertyChanged;
}
private void UserOnPropertyChanged(object sender,
PropertyChangedEventArgs e)
{
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
}
Second Module
public UserDetailsViewModel(IEventAggregator userEventAggregator,
IUnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>).Subscribe(UserUpdate);
}
The User Object within the UserViewModel initialized but not in the UserDetailsViewModel (it creates its own object)
这是错误的做事方式,不是视图模型创建模型,而是视图模型是从模型创建的。您需要从两个视图模型访问的共享服务,并且该服务管理模型。
示例:
internal class SimpleInMemoryUserRepository : IUserRepository
{
public User GetTheUser()
{
return _user;
}
public void DeleteTheUser()
{
_user = null;
}
public void CreateNewUser()
{
_user = new User();
}
private User _user;
}
在你的初始化代码中:
container.RegisterSingleton<IUserRepository, SimpleInMemoryUserRepository>();
我有多个模块(每个模块都有自己的项目),我尝试在每个模块之间共享一个对象。
该对象在已初始化的 UserViewModel 模块上,但未在其他模块上(仅在 属性 更改触发器之后)。我用 EventAggregator 试过了,但它没有正确退出。我在这里错过了一些非常重要的东西。
public UserClass User
{
get { return _user; }
set { SetProperty(ref _user, value);}
}
First Module
public UserViewModel(IEventAggregator userEventAggregator,
UnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
User.PropertyChanged += UserOnPropertyChanged;
}
private void UserOnPropertyChanged(object sender,
PropertyChangedEventArgs e)
{
_userEventAggregator.GetEvent<UserSentEvent>().Publish(User);
}
Second Module
public UserDetailsViewModel(IEventAggregator userEventAggregator,
IUnityContainer container)
{
_userEventAggregator= userEventAggregator;
_userEventAggregator.GetEvent<UserSentEvent>).Subscribe(UserUpdate);
}
The User Object within the UserViewModel initialized but not in the UserDetailsViewModel (it creates its own object)
这是错误的做事方式,不是视图模型创建模型,而是视图模型是从模型创建的。您需要从两个视图模型访问的共享服务,并且该服务管理模型。
示例:
internal class SimpleInMemoryUserRepository : IUserRepository
{
public User GetTheUser()
{
return _user;
}
public void DeleteTheUser()
{
_user = null;
}
public void CreateNewUser()
{
_user = new User();
}
private User _user;
}
在你的初始化代码中:
container.RegisterSingleton<IUserRepository, SimpleInMemoryUserRepository>();