I took a slightly different approach.
For this example, I only have a single instance, but I'm sure it's fairly easily extendable for multiple instances...
So, on my class I create the following Action (it could be a Func if you need something returned). For my example, I'm just pushing an Exception around:
private static Action<Exception> StaticAccessorToInstanceMethod { get; set; }
And the instance method I want to call is:
public void HandleExceptionDetails(Exception e)
{
// Content of the method on the instance
}
I then have this in my constructor:
StaticAccessorToInstanceMethod = this.HandleExceptionDetails;
And the following in the destructor:
StaticAccessorToInstanceMethod = null;
(If you're dealing with multiple instances, then the constructor and destructor code would be a bit different).
Then the static method simply calls the instance method:
public static void HandleGeneralException(Exception ex)
{
StaticAccessorToInstanceMethod(result);
}
I've left out defensive logic.