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

时间:2011-02-23 18:05:40

标签: .net proxy appdomain

有没有办法确定TransparentProxy是否指向有效参考?

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

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

1 个答案:

答案 0 :(得分:0)

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

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