Как определить, указывает ли TransparentProxy на действительный экземпляр - PullRequest
2 голосов
/ 23 февраля 2011

Есть ли способ определить, указывает ли 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 голосов
/ 11 января 2012

Ну, так как никто не предложил правильный ответ, вы можете попробовать это:

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