如何在我在另一个AppDomain中创建的对象上调用方法?我想避免使用CreateInstanceFromAndUnwrap
因为这需要我引用我想要操作的DLL。
public static void Main() {
// Create domain
AppDomain domain = AppDomain.CreateDomain("Foo");
// Load assembly
domain.Load("C:\\Foo.dll");
// Create instance of class
System.Runtime.Remoting.ObjectHandle inst
= domain.CreateInstance("C:\\Foo.dll", "MyNamespace.MyClass");
// Call method -- How can I do this ???
object result = inst.PleaseCallMethod("MyMethod", "param1", 42, "p3", null);
}
在Foo.dll
我会:
namespace MyNamespace {
public class MyClass {
public string MyMethod(string p1, int p2, string p3, string p4) {
return "...";
}
}
}
另外,如果没有首先创建包含它的(可能是静态的)类的实例,我将如何调用静态方法?
答案 0 :(得分:2)
您可以致电:
domain.DoCallBack(() => Console.WriteLine("DoCallBack: {0}", AppDomain.CurrentDomain.FriendlyName));
但这需要运行代码的程序集加载到新的appdomain中。
如果您的新应用程序域具有不同的基本路径和/或需要新应用程序域中的运行时无法解析的程序集,则可能需要创建一个在DoCallBack中调用的隔离条目程序集,并从此加载来自所需位置的组件。