Можно ли настроить Castle DynamicProxy так, чтобы он не записывал аргументы 'ref'? - PullRequest
0 голосов
/ 10 июля 2019

Я получаю исключение AccessViolationException при попытке использовать прокси-интерфейс интерфейса, который оборачивает сторонний интерфейс. Исключение выдается, когда выданный код записывает массив аргументов вызова обратно в исходный аргумент типа arg «ref». Предположительно, это связано с тем, что сторонний компонент дал параметр «только», и его нельзя записывать в.

Итак, мне было интересно, можно ли настроить DynamicProxy (или улучшить / взломать) на , а не записать несколько аргументов? Может быть, путем настройки собственного генератора кода или чего-то еще ...

Или, не задумываясь, сработает ли применение [InAttribute] во время выполнения к стороннему интерфейсу (при условии, что DynamicProxy можно настроить для соответствия этому атрибуту)?

Другая, может быть полезная информация:

  • Сторонний интерфейс не использует ключевое слово «in» или InAttribute в аргументе «ref» обидчика.
  • Я пытаюсь использовать интерфейсные прокси, созданные с целью

Пример кода:

    namespace third_party
    {
      public class IService
      {
        public int DoSomething(ref Guid guid);
      }
    }
    namespace domain_ns
    {
      public class ServiceImpl : IService
      {
        public int DoSomething(ref Guid guid) { return 0; }
      }

      public static void main(string[] args)
      {
        ...
        var proxy = proxyGen.CreateInterfaceProxyWithTarget(..., new ServiceImpl(), ... );
        third_party.AddService(proxy);

        // Indirectly causes proxy.DoSomething() to be called.
        // Throws an AccessViolationException :(
        third_party.Go();
      }
    }
...