Можно ли использовать RealProxy для предоставления интерфейсов классов через Remoting без MarshalByRefObject?

Можно ли сделать RealProxy это выглядит так:

public InterfaceProxy(object instance, params Type[] interfaces)

и может разоблачить все это interfaces перераспределение, делегирование вызовов instanceдаже если экземпляр не является MarshalByRefObject?

В настоящее время у меня возникла проблема, когда прокси получает вызов InitializeLifetimeServiceи все, что я вернусь от него (в том числе null), Я всегда получаю следующее исключение:

System.InvalidCastException:Return argument has an invalid type
at System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object arg, Type paramType)
at System.Runtime.Remoting.Proxies.RealProxy.PropagateOutParameters(IMessage msg, Object[] outArgs, Object returnValue)
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnmessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)

1 ответ

Просто попросите ваш класс реализовать IRemotingTypeInfo.

псевдокод выглядит так:

class InterfaceProxy : RealProxy, IRemotingTypeInfo
{
    // snip all the basics

    bool IRemotingTypeInfo.CanCastTo(Type fromType, Object o)
    {
        return interfaces.Contains(fromType);
    }
}
Другие вопросы по тегам