初始化对象并在模块之间共享

时间:2019-05-20 19:40:55

标签: c# prism

我有多个模块(每个模块都有自己的项目),我尝试在每个模块之间共享一个对象。

该对象已在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);
  }

1 个答案:

答案 0 :(得分:0)

  

已初始化UserViewModel中的用户对象,但未初始化UserDetailsViewModel中的用户对象(它创建了自己的对象)

这是错误的处理方式,不是视图模型创建模型,而是视图模型是从模型创建的。您需要从两个视图模型访问的共享服务,并且该服务将管理模型。

示例:

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>();