0

我们有一个实现 IModule 接口的模块类,它只有一个方法 Initialize() 用于注册我们的视图。成功登录后是否可以注册这些视图?

我想根据当前用户禁止注册多个视图。但是用户在模块初始化后登录。

有没有办法提供回调,Prism 可以评估注册是否处于活动状态?或者我是否有机会禁用区域经理的注册?还有其他想法吗?

谢谢

4

1 回答 1

1

在 Prism 中的多个模块(甚至内部)之间进行通信的最简单方法是使用 EventAggregator。这是我要做的:

  1. 为 UserLoginEvent 创建一个 CompositePresentationEvent,它采用有关用户的相关参数
  2. 用户成功登录后使用 IEventAggregator 发布事件
  3. 在您的模块初始化时,订阅 UserLoginEvent,在处理程序中注册适当的视图
  4. 如果需要,对 UserLogout 重复上述操作,但相反。

在您的基础设施库中:

public class UserLoginEvent : CompositePresentationEvent<User> { }

然后在你的模块中:

public class YourModule : IModule
{
    private readonly IUnityContainer container;
    private readonly IRegionManager regionManager;
    private readonly IEventAggregator events;

    public YourModule(IUnityContainer container, IRegionManager manager, IEventAggregator events)
    {
        this.container = container;
        this.regionManager = manager;
        this.events = events;
    }

    public void Initialize()
    {
        ....
        events.GetEvent<UserLoginEvent>().Subscribe(RegisterUserViews);
    }

    private void RegisterUserViews(User u)
    {
            // check user permissions
            // register and create views using container, regionManager
    }
}

在您的用户登录的任何模块/代码中......我假设您可以获得 IEventAggregator (类似于上面),然后执行以下操作:

OnUserLogin(User u)
{
    eventAggregator.GetEvent<UserLoginEvent>().Publish(u);
}

希望这可以帮助!如果用户注销,那么您可能希望在模块中存储对您的视图的引用并在 UserLogoutEvent 上删除它们,这将像上面的代码一样工作,但只是做相反的事情。

于 2013-05-24T14:54:26.613 回答