Что может сработать, так это перехватывать вызовы этих объектов с помощью прокси и переадресовывать вызовы реальному объекту.Обратите внимание, что я не очень опытен в этом, поэтому я не уверен, что это на самом деле работает, но вот так:
public class DependencyInjectionProxy : RealProxy
{
private object realInstance;
public DependencyInjectionProxy(Type classToProxy,
object realInstance) : base(classToProxy)
{
this.realInstance = realInstance;
}
public static T MakeProxy<T>(T realInstance)
{
return (T)(new DependencyInjectionProxy(typeof(T),
realInstance).GetTransparentProxy());
}
public override IMessage Invoke(IMessage msg)
{
if (msg is IMethodCallMessage)
{
var message = (IMethodCallMessage)msg;
object value = message.MethodBase.Invoke(
this.realInstance, message.Args);
Console.WriteLine(value);
return new ReturnMessage(value, null, 0, null, message);
}
return msg;
}
}
Это работает, когда вы делаете что-то вроде этого:
var container = new YourContainer();
container.RegisterSingle<IService, Service>();
IService proxy = DependencyInjectionProxy.MakeProxy<IService>(
container.Resolve<IService>());
proxy.SomeMethod();
Это прекрасно работает, но, честно говоря, я не знаю, как настроить это таким образом, чтобы вы могли таким образом перехватывать входящие вызовы.Где-то вам нужно зарегистрировать свой DependencyInjectionProxy
, но на этом мой опыт с удаленным взаимодействием прекращается: -)