Ok, it turns out the use of interface is unnecessary. I just found out that the Form class eventually inherits from MarshalByRefObj, sorry, my mistake. If you try it, here are the causes why it won't work based on the test project you posted:
1. If you passed a policy-enabled instance of Form1 in Application.Run(), methods called inside the same instance of Form1 won't get intercepted. You need to wrap the existing instance and call the method against the new instance.
Take note that methods must be public. In your case, you can add a public method in Form1, change the logic in your button1_Click to wrap the current instance of Form1 and call the public method on that new instance:
private void button1_Click(object sender, EventArgs e)
Form1 form = PolicyInjection.Wrap<Form1>(this);
public void Log(string message)
This will then intercept the Log method with the LogCallHandler.
Global Technologies and Solutions