Prism の複数のモジュール間 (またはモジュール内) で通信する最も簡単な方法は、EventAggregator を使用することです。これが私がすることです:
- ユーザーに関する関連パラメーターを取る UserLoginEvent の CompositePresentationEvent を作成します。
- ユーザーが正常にログインしたら、IEventAggregator を使用してイベントを発行します。
- モジュールの初期化で UserLoginEvent をサブスクライブし、ハンドラーで適切なビューを登録します。
- 必要に応じて、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 でそれらを削除することができますが、逆のことを行うだけです。