Замок интерфейс прокси без цели


Я пытаюсь создать прокси для интерфейса без цели, и я всегда получаю System.NullReferenceException, Когда я вызываю метод на результирующем прокси, хотя перехватчик всегда хорошо вызывается.

Вот определение для интерфейса и перехватчика:

internal class MyInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
            Console.WriteLine(invocation.Method.Name);
    }
}

public interface IMyInterface
{
    int Calc(int x, int y);
    int Calc(int x, int y, int z);
}

А вот это основная программа:

class Program
{
    static void Main(string[] args)
    {
        ProxyGenerator generator = new ProxyGenerator();

        IMyInterface proxy = (IMyInterface) generator.CreateInterfaceProxyWithoutTarget(
            typeof(IMyInterface), new MyInterceptor());

        proxy.Calc(5, 7);
    }
}

Вызывается перехватчик, но я получаю исключение из DynamicProxyGenAssembly2. Почему?

1   3   2013-12-12 18:57:21

1 ответ:

Проблема заключается в возвращаемом типе метода Calc, который является примитивным Int32. Если вы не задаете возвращаемое значение в перехватчике, то он вернет null и, таким образом, Когда прокси попытается преобразовать это значение в Int32, он выдаст NullPointerException.

Чтобы устранить проблему, необходимо задать возвращаемое значение в методе intercept, например invocation.ReturnValue = 0;