我们有一个实现 IModule 接口的模块类,它只有一个方法 Initialize() 用于注册我们的视图。成功登录后是否可以注册这些视图?
我想根据当前用户禁止注册多个视图。但是用户在模块初始化后登录。
有没有办法提供回调,Prism 可以评估注册是否处于活动状态?或者我是否有机会禁用区域经理的注册?还有其他想法吗?
谢谢
我们有一个实现 IModule 接口的模块类,它只有一个方法 Initialize() 用于注册我们的视图。成功登录后是否可以注册这些视图?
我想根据当前用户禁止注册多个视图。但是用户在模块初始化后登录。
有没有办法提供回调,Prism 可以评估注册是否处于活动状态?或者我是否有机会禁用区域经理的注册?还有其他想法吗?
谢谢
在 Prism 中的多个模块(甚至内部)之间进行通信的最简单方法是使用 EventAggregator。这是我要做的:
在您的基础设施库中:
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 上删除它们,这将像上面的代码一样工作,但只是做相反的事情。