是否有一种方法可以传递和使用跨应用程序域的引用类型/值类型的地址?(c#)

本文关键字:引用类型 应用程序域 类型 地址 一种 方法 是否 | 更新日期: 2023-09-27 18:02:18

我有一个应用程序和一组插件。它们跨应用程序域通信。

我需要的是一种方法让应用程序发送对象(用户定义或c# int, double, string等)跨应用程序域边界,允许插件直接编辑它(即地址,像指针),然后返回并让对象保持由插件设置的值。

另外,我不想在我的应用程序中使用"不安全"的代码。

任何想法?

是否有一种方法可以传递和使用跨应用程序域的引用类型/值类型的地址?(c#)

这是一个应用程序域的定义,你不能这样做。

如果你不想封送一个对象的值跨越应用程序域的边界,你能做的最好的是有某种类型的回调插件设置值在原来的应用程序域

地址只能在不安全代码中使用。我怀疑你是否能触及到你的应用程序域。

您可以创建从MarshalByRefObject继承的类,它将创建一个代理供您使用。

并非如此-应用程序域有相当严格的边界。您需要编写一个包装器层来传递序列化的对象,并将原始端的对象设置为传递回来的值。

继承MarshalByRefObject的类。然后可以通过appdomain边界调用它。但是如果你直接使用你的类,你将把程序集加载到你的主域。为了避免这种情况,创建一个接口并将其放在主程序集或某个第三程序集中。并获取对该接口的引用:

AppDomain domain = AppDomain.CreateDomain("MyDomain");
return (IMyClass)domain.CreateInstanceAndUnwrap("MyLib.MyClass", "MyLib");