Сначала вам нужно изменить свой класс для реализации интерфейса (а не для реализации MarshalByRefObject).
interface ITraced {
void Method1();
void Method2()
}
class Traced: ITraced { .... }
Затем вам понадобится общий объект-оболочка на основе RealProxy, чтобы украсить любой интерфейс, чтобы позволить перехватывать любые вызов декорированного объекта.
class MethodLogInterceptor: RealProxy
{
public MethodLogInterceptor(Type interfaceType, object decorated)
: base(interfaceType)
{
_decorated = decorated;
}
public override IMessage Invoke(IMessage msg)
{
var methodCall = msg as IMethodCallMessage;
var methodInfo = methodCall.MethodBase;
Console.WriteLine("Precall " + methodInfo.Name);
var result = methodInfo.Invoke(_decorated, methodCall.InArgs);
Console.WriteLine("Postcall " + methodInfo.Name);
return new ReturnMessage(result, null, 0,
methodCall.LogicalCallContext, methodCall);
}
}
Теперь мы готовы перехватить вызовы метода Method1 и Method2 из файла ITraced
public class Caller
{
public static void Call()
{
ITraced traced = (ITraced)new MethodLogInterceptor(typeof(ITraced), new Traced()).GetTransparentProxy();
traced.Method1();
traced.Method2();
}
}
Другое возможное решение, которое не упомянуто выше, состоит в том, чтобы проверить Ваше удаленное со следующей командой:
git remote -v
, Если удаленное не запускается с мерзавца, но запускается с https, Вы могли бы хотеть изменить его на мерзавца путем следования примеру ниже.
git remote -v // origin is https://github.com/user/myrepo.git
git remote-set origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed