考虑以下情况:
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。抱歉格式不佳!
答案 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;
}
}