|
using System;
using Pfz.InterfaceWrapping.EventArguments;
using Pfz.InterfaceWrapping.Internal;
namespace Pfz.InterfaceWrapping
{
/// <summary>
/// This class creates an interfacewrapper that calls all the original
/// methods, events and properties, but also calls a BeforeInvoke and AfterInvoke
/// for all of them. In Before, you can forbid the original call setting CanInvoke
/// to false and, if you call the original method, you will always have a chance to
/// process after, having an exception being thrown or not.
/// </summary>
public sealed class EventedWrapperGenerator:
InvokeWrapperGenerator
{
#region Constructor
/// <summary>
/// Creates a new EventedWrapperGenerator.
/// </summary>
public EventedWrapperGenerator():
base(typeof(EventedWrapper))
{
}
#endregion
#region Methods
#region Initialize
/// <summary>
/// Initializes the wrapper to point to the sourceObject.
/// </summary>
protected override void InitializeCreatedObject(object sourceObject, object interfaceWrapper)
{
base.InitializeCreatedObject(sourceObject, interfaceWrapper);
EventedWrapper wrapper = (EventedWrapper)interfaceWrapper;
wrapper.fOwner = this;
wrapper.fSource = sourceObject;
}
#endregion
internal void i_DoBeforeInvokeMethod(InvokeMethodEventArgs args)
{
if (BeforeInvokeMethod != null)
BeforeInvokeMethod(this, args);
}
internal void i_DoAfterInvokeMethod(InvokeMethodEventArgs args)
{
if (AfterInvokeMethod != null)
AfterInvokeMethod(this, args);
}
internal void i_DoBeforeInvokePropertyGet(InvokePropertyEventArgs args)
{
if (BeforeInvokePropertyGet != null)
BeforeInvokePropertyGet(this, args);
}
internal void i_DoAfterInvokePropertyGet(InvokePropertyEventArgs args)
{
if (AfterInvokePropertyGet != null)
AfterInvokePropertyGet(this, args);
}
internal void i_DoBeforeInvokePropertySet(InvokePropertyEventArgs args)
{
if (BeforeInvokePropertySet != null)
BeforeInvokePropertySet(this, args);
}
internal void i_DoAfterInvokePropertySet(InvokePropertyEventArgs args)
{
if (AfterInvokePropertySet != null)
AfterInvokePropertySet(this, args);
}
internal void i_DoBeforeInvokeEventAdd(InvokeEventEventArgs args)
{
if (BeforeInvokeEventAdd != null)
BeforeInvokeEventAdd(this, args);
}
internal void i_DoAfterInvokeEventAdd(InvokeEventEventArgs args)
{
if (AfterInvokeEventAdd != null)
AfterInvokeEventAdd(this, args);
}
internal void i_DoBeforeInvokeEventRemove(InvokeEventEventArgs args)
{
if (BeforeInvokeEventRemove != null)
BeforeInvokeEventRemove(this, args);
}
internal void i_DoAfterInvokeEventRemove(InvokeEventEventArgs args)
{
if (AfterInvokeEventRemove != null)
AfterInvokeEventRemove(this, args);
}
#endregion
#region Events
/// <summary>
/// Occurs just before invoking a method.
/// </summary>
public event EventHandler<InvokeMethodEventArgs> BeforeInvokeMethod;
/// <summary>
/// Occurs just after a method has been invoked. This event is called
/// even if an exception was thrown.
/// </summary>
public event EventHandler<InvokeMethodEventArgs> AfterInvokeMethod;
/// <summary>
/// Occurs just before a property get call.
/// </summary>
public event EventHandler<InvokePropertyEventArgs> BeforeInvokePropertyGet;
/// <summary>
/// Occurs just after a property get call. This event is called even
/// if an exception was thrown.
/// </summary>
public event EventHandler<InvokePropertyEventArgs> AfterInvokePropertyGet;
/// <summary>
/// Occurs just before a property set call.
/// </summary>
public event EventHandler<InvokePropertyEventArgs> BeforeInvokePropertySet;
/// <summary>
/// Occurs just after a property set call, or when an exception is thrown
/// during such call.
/// </summary>
public event EventHandler<InvokePropertyEventArgs> AfterInvokePropertySet;
/// <summary>
/// Occurs just before EventAdd call.
/// </summary>
public event EventHandler<InvokeEventEventArgs> BeforeInvokeEventAdd;
/// <summary>
/// Occurs just after EventAdd call.
/// </summary>
public event EventHandler<InvokeEventEventArgs> AfterInvokeEventAdd;
/// <summary>
/// Occurs just before EventRemove call.
/// </summary>
public event EventHandler<InvokeEventEventArgs> BeforeInvokeEventRemove;
/// <summary>
/// Occurs just after EventRemove call.
/// </summary>
public event EventHandler<InvokeEventEventArgs> AfterInvokeEventRemove;
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I started to program computers when I was 11 years old, as a hobbyist, programming in AMOS Basic and Blitz Basic for Amiga.
At 12 I had my first try with assembler, but it was too difficult at the time. Then, in the same year, I learned C and, after learning C, I was finally able to learn assembler (for Motorola 680x0).
Not sure, but probably between 12 and 13, I started to learn C++. I always programmed "in an object oriented way", but using function pointers instead of virtual methods.
At 15 I started to learn Pascal at school and to use Delphi. At 16 I started my first internship (using Delphi). At 18 I started to work professionally using C++ and since then I've developed my programming skills as a professional developer in C++ and C#, generally creating libraries that help other developers do their work easier, faster and with less errors.
Want more info or simply want to contact me?
Take a look at:
http://paulozemek.azurewebsites.net/
Or e-mail me at: paulozemek@outlook.com
Codeproject MVP 2012, 2015 & 2016
Microsoft MVP 2013-2014 (in October 2014 I started working at Microsoft, so I can't be a Microsoft MVP anymore).