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

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