so idea simple, how check if there duplicate subscribers.
so if have
_moduleevent += _coachesevents.ondifficultyscorelistchanged;
subscribed in multiple locations, don't want method called twice (or more).
my current code (with added logic after researching):
/// <summary> /// delegate points multiple module methods /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private delegate void moduleeventhandler(object sender, opportunityeventargs args); /// <summary> /// /// </summary> private event moduleeventhandler _moduleevent { add { if (_moduleevent == null || !_moduleevent.getinvocationlist().contains(value)) { _moduleevent += value; } } remove { _moduleevent -= value; } }
in event checking if it's null , checking getinnvocationlist, error _moduleevent should appear on left hand side of += etc.
/// <summary> /// check whether there subscribers /// </summary> private void _onmoduleevent(businessentities.opportunity o) { if (_moduleevent != null) _moduleevent(this, new opportunityeventargs() { opportunity = o }); }
i see _moduleevent should appear on left hand side of += error above.
i can assume it's custom delegate ? if remove add/remove in eventhandler works fine.
any appreciated.
i suggest should create dictionary , check
create class below
public class subscription { public readonly methodinfo methodinfo; public readonly weakreference targetobjet; public subscription(action<tmessage> action, eventaggregator eventaggregator) { methodinfo = action.method; targetobjet = new weakreference(action.target); } }
than use class in class expose event
public class eventexposer { private dictionary<type, ilist> subscriber; public eventexposer() { subscriber = new dictionary<type, ilist>(); } public void addevent(action action) { type t = typeof(action.target); if (!subscriber.containskey(t)) { subscriber.add(t, action); } } }
Comments
Post a Comment