可以将Castle DynamicProxy配置为不写入'ref'参数吗?

时间:2019-07-10 18:59:38

标签: castle-dynamicproxy

当尝试使用包装第三方接口的接口代理时,我遇到了AccessViolationException。当发出的代码将“ arg”类型的调用arg数组写回到原始arg时,将引发异常。大概是因为第三方组件给出了“仅”参数,因此不应将其写入。

所以,我想知道是否可以将DynamicProxy配置(或增强/破解)为写一些参数?也许通过配置自定义代码发射器之类的东西...

还是在框外思考,在运行时将[InAttribute]应用到第三方接口是否可行(假设可以将DynamicProxy配置为遵守该属性)?

其他可能有用的信息:

  • 第三方界面未在有问题的“ ref”参数上使用“ in”关键字或InAttribute。
  • 我正在尝试使用由目标创建的接口代理

示例代码:

    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();
      }
    }

0 个答案:

没有答案