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

C# 初始化对象并在模块之间共享,c#,prism,C#,Prism,我有多个模块(每个模块都有自己的项目),我尝试在每个模块之间共享一个对象 该对象位于初始化的UserViewModel模块上,但不在其他模块上(仅在属性更改触发器之后)。我用EventAggregator试过了,但没有成功。我错过了一些非常重要的事情 公共用户类用户 { 获取{return\u user;} set{SetProperty(ref_user,value);} } 第一模块 public UserViewModel(IEventAggregator userEventAggrega

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

该对象位于初始化的UserViewModel模块上,但不在其他模块上(仅在属性更改触发器之后)。我用EventAggregator试过了,但没有成功。我错过了一些非常重要的事情

公共用户类用户
{
获取{return\u user;}
set{SetProperty(ref_user,value);}
}
第一模块
public UserViewModel(IEventAggregator userEventAggregator,
UnityContainer(容器)
{
_userEventAggregator=userEventAggregator;
_userEventAggregator.GetEvent().Publish(用户);
User.PropertyChanged+=UserOnPropertyChanged;
}
私有void UserOnPropertyChanged(对象发送方,
PropertyChangedEventArgs(e)
{
_userEventAggregator.GetEvent().Publish(用户);
}
第二模块
public UserDetailsViewModel(IEventAggregator userEventAggregator,
IUnityContainer(集装箱)
{
_userEventAggregator=userEventAggregator;
_userEventAggregator.GetEvent).Subscribe(UserUpdate);
}
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>();
container.RegisterSingleton();
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>();
container.RegisterSingleton();

您面临的例外情况是什么?你到底想达到什么目的?@Haukinger也不例外。UserViewModel中的用户对象已初始化,但不在UserDetailsViewModel中(它创建自己的对象)。仅当UserOnPropertyChanged触发UserDetailsViewModel中的用户对象与UserViewModel用户对象相同时。我的目标是在每个模块中使用相同的对象。您面临的例外是什么?你到底想达到什么目的?@Haukinger也不例外。UserViewModel中的用户对象已初始化,但不在UserDetailsViewModel中(它创建自己的对象)。仅当UserOnPropertyChanged触发UserDetailsViewModel中的用户对象与UserViewModel用户对象相同时。我的目标是在每个模块中使用相同的对象。非常感谢!RegisterSingleton/RegisterInstance是我完全错过的东西,难怪我不能对这件事保持清醒。非常感谢!RegisterSingleton/RegisterInstance是我完全错过的东西,难怪我不能对这件事保持清醒的头脑。