如何在另一个AppDomain中调用方法

时间:2014-05-05 17:36:23

标签: c# remoting appdomain

如何在我在另一个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 "...";
        }
    }
}

另外,如果没有首先创建包含它的(可能是静态的)类的实例,我将如何调用静态方法?

1 个答案:

答案 0 :(得分:2)

您可以致电:

domain.DoCallBack(() => Console.WriteLine("DoCallBack: {0}", AppDomain.CurrentDomain.FriendlyName));

但这需要运行代码的程序集加载到新的appdomain中。

如果您的新应用程序域具有不同的基本路径和/或需要新应用程序域中的运行时无法解析的程序集,则可能需要创建一个在DoCallBack中调用的隔离条目程序集,并从此加载来自所需位置的组件。