将ironpython方法分配给C#delegate,此方法将通过appDomains传递

时间:2012-07-03 09:16:24

标签: c# delegates ironpython appdomain

考虑以下情况:

AppDoamin 1:

public delegate bool Delegate1(class1 c1,string p);

 class class1
  {
    public bool method1(Delegate1 d, out IEnumerable<string> partNumbers)
      {
      //Method body
       }
    }

AppDoamin2:

class x
 {
  public bool method2(Dictionary<string,string> x,out string[] returnValues)
   {
    class1Instance.method1(delegate(class1 cc,string pp){if(x.Key=="blaah") return False;},out temp);

    }
  }

IronPython脚本: 调用方法2。

这种方法给出了序列化异常,因为appDomain2中的委托正在使用堆栈中的变量。

可能的解决方案: 将委托方法从ironpython脚本传递到appDomain2中的方法,该方法在Appdomain3中传递。

问题: 这该怎么做?直到现在还无法搜索任何内容。

注意:使用.NET Framework 2和ironpython 2.7.1。

P.S。抱歉格式不佳!

1 个答案:

答案 0 :(得分:1)

找到答案。通常情况下,回答是甜蜜而简单的!

所以创建了一个小的帮助器类,它封装了整个委托实现,成员变量等。这个类的构造函数接受必要的参数(这导致了无法序列化委托的问题)。以下是小助手类我写 -

public sealed class DevCatalogFilterHelper : MarshalByRefObject
{
    Dictionary<string, string> m_resourceNameValuePair;

    public DevCatalogFilterHelper(Dictionary<string, string> resourceNameValuePair)
    {
        this.m_resourceNameValuePair = resourceNameValuePair;
    }

    public  bool FilterDelegate(class1 devCat,string partNumber)
    {
        foreach (KeyValuePair<string, string> kvp in m_resourceNameValuePair)
        {
            string value;
           //if(condition){helpFull code return false;}
        }
        return true;
    }
}