はい、サブスクライバ情報はEventAggregator
オブジェクトグラフに含まれています。残念ながら(ご要望に応じて)、この情報はプライベートフィールドに保存されています。
イベントはプライベートDictionary<Type, EventBase> events
に格納されます。サブスクリプション情報を取得するため
private readonly List<IEventSubscription> _subscriptions = new List<IEventSubscription>();
一つの選択肢は、(反射許可が存在すると仮定した場合)のプライベートメンバ変数にアクセスするためにリフレクションを使用することであると。サブスクリプションは、(EventBase
で)イベント自体の中に保存されています
EventBase
はprotected ICollection<IEventSubscription> Subscriptions
プロパティを使用してサブクラスのサブスクリプションにアクセスできるため、イベントを変更できる場合は別の方法でこの情報を公開することもできます。たとえば:
var myEvent = eventAggregator.GetEvent<MyEvent>();
var sub = (EventSubscription<MyEventData>) myEvent.Subscriptions.FirstOrDefault();
MethodInfo method = sub.Action.Method;
object target = sub.Action.Target;
あなたが特定のEventSubscription<T>
データを必要としない場合(単にサブスクリプションの数を知りたいなど)は、あなたが特定のキャストを避けることができます:
public class MyEvent : PubSubEvent<MyEventData>
{
public new ICollection<IEventSubscription> Subscriptions => base.Subscriptions;
}
は、その後、あなたがイベントを照会することができますIEventSubscription
インターフェイスを使用します。