如何确定TransparentProxy是否指向有效实例

发布于 2024-10-19 01:25:03 字数 730 浏览 2 评论 0原文

有没有办法确定 TransparentProxy 是否指向有效的引用?

我有IPlugin。我创建一个新的 AppDomain,使用 IPlugin 的实现加载程序集,并创建该实现的实例。我收到一个 IPlugin,但其内部是 TransparentProxy。如果我卸载辅助 AppDomain,IPlugin 的实例(代理指向的实例)就会消失。但代理仍然指向那里。当我尝试访问代理时,我的程序崩溃(无一例外)。

伪代码:

var domain = CreateDomain("domain");
var assembly = domain.LoadAssembly("myAssembly");
var plugin = domain.CreateObject("MyPlugin") as IPlugin; 
// plugin is really a TransparentProxy to a MyPlugin

if (plugin != null)
    plugin.DoSomething("123");

UnloadDomain(domain);

if (plugin != null) // Still evaluates to TRUE!
    plugin.DoSomething("123"); // Program crashes with no exceptions

Is there a way to determine whether a TransparentProxy is pointing to a valid reference?

I have IPlugin. I create a new AppDomain, load the assembly with an implementation of IPlugin, and create an instance of that implemenation. I receive a IPlugin, but under the covers its TransparentProxy. If I unload the secondary AppDomain, the instance of IPlugin (the one that the proxy points to) is gone. But the proxy is still pointing there. My program crashes (with no exceptions) when I try to access the proxy.

Psudeocode:

var domain = CreateDomain("domain");
var assembly = domain.LoadAssembly("myAssembly");
var plugin = domain.CreateObject("MyPlugin") as IPlugin; 
// plugin is really a TransparentProxy to a MyPlugin

if (plugin != null)
    plugin.DoSomething("123");

UnloadDomain(domain);

if (plugin != null) // Still evaluates to TRUE!
    plugin.DoSomething("123"); // Program crashes with no exceptions

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

被翻牌 2024-10-26 01:25:03

好吧,既然没有人提出正确的答案,你可以试试这个:

public static bool IsValidReference(MarshalByRefObject obj)
{
    try {
        obj.Equals(null);
        return true;
    } catch (RemotingException e) {
        return false;
    }
}

Well, since no one has suggested a proper answer, you could try this:

public static bool IsValidReference(MarshalByRefObject obj)
{
    try {
        obj.Equals(null);
        return true;
    } catch (RemotingException e) {
        return false;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文