Raise Event from outside
Normally raising event is the responsibility side of a class, but in workflow there is a need to raise event from outside. Here is the code that allow client dynamically raise event externally.
class EventRaiser
{
static BindingFlags getEventFlags = BindingFlags.Instance | BindingFlags.NonPublic;
private object _eventObject;
private MethodInfo _eventInvoker;
public EventRaiser(object hostingObject, string eventName)
{
FieldInfo fieldInfo = hostingObject.GetType().GetField(eventName, getEventFlags);
_eventObject = fieldInfo.GetValue(hostingObject);
_eventInvoker = _eventObject.GetType().GetMethod("Invoke");
}
public void RaiseEvent(WorkflowEventArguementBase argument)
{
_eventInvoker.Invoke(_eventObject, new object[] { null, argument });
}
}