Можно ли использовать 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);
}
}