0

IModule インターフェイスを実装するモジュール クラスがあり、ビューを登録するメソッド Initialize() が 1 つだけあります。ログインに成功した後、これらのビューを登録することは可能ですか?

現在のユーザーに応じて複数のビューの登録を禁止したい。ただし、ユーザーはモジュールの初期化後にログオンします。

登録がアクティブかどうかを Prism が評価できるコールバックを提供する方法はありますか? または、Region Manager の登録を無効にする機会はありますか? 他のアイデアはありますか?

ありがとう

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 に答える