gpt4 book ai didi

c# - 无法转换 System.Runtime.Remoting.ObjectHandle

转载 作者:太空狗 更新时间:2023-10-29 18:04:04 24 4
gpt4 key购买 nike

在我的代码中,我有一个接口(interface) - 假设它称为 InterfaceName,它的实现称为 InterfaceImpl。现在,当我动态尝试使用以下代码获取 InterfaceImpl 时:

object obj = Activator.CreateInstance("ProjectName","ProjectName.Folder.InterfaceImpl");
InterfaceName in = (InterfaceName)obj; //Error pops up here

出现以下错误

Unable to cast object of type 'System.Runtime.Remoting.ObjectHandle' to type 'ProjectName.Folder.InterfaceName'.

对可能出现的问题有什么建议吗?

最佳答案

If you read the documentation about the method you are calling , 它返回

A handle that must be unwrapped to access the newly created instance.

查看ObjectHandle 的文档,您只需调用Unwrap()为了获得您要创建的类型的实例。

所以,我猜你真正的问题是......为什么?

此方法旨在在另一个 AppDomain 中调用,句柄返回调用 AppDomain,实例的代理在此处“展开”。

什么?这还不能解释为什么?

只有两种类型可以跨越 AppDomain 障碍。可序列化的类型(创建副本)和扩展类型 MarshalByRefObject (其中代理被创建和传递)。 ObjectHandle 扩展 MarshalByRefObject,因此可以跨越 AppDomain 障碍,而它们所表示的类型可能不会扩展 MBRO 可序列化。此方法可确保您无论如何都可以获得该类型的实例。

因此,如果您只是尝试实例化一个类型,您可能需要查看 CreateInstance 的不同重载。或者只是打开结果。

var obj = Activator.CreateInstance("A","A.B.C") as ObjectHandle;
InterfaceName in = (InterfaceName)obj.Unwrap();

关于c# - 无法转换 System.Runtime.Remoting.ObjectHandle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13366352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com