Skip to content

Commit 8bb0ea0

Browse files
committed
Fixed ExecuteCOmmand proxy mechanism
1 parent bf5abd9 commit 8bb0ea0

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

UIExtenderLibModule/ViewModel/ViewModelComponent.cs

+13
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,19 @@ private Type GenerateExtendedVMTypeFor(Type t)
160160
}
161161
}
162162

163+
foreach (var method in t.GetMethods(BindingFlags.Instance | BindingFlags.NonPublic).Where(m => m.Name.StartsWith("Execute")))
164+
{
165+
var newMethod = builder.DefineMethod(method.Name, MethodAttributes.Public, method.ReturnType, method.GetParameters().Select(p => p.ParameterType).ToArray());
166+
var gen = newMethod.GetILGenerator();
167+
168+
// body
169+
var proxyExecuteCall = typeof(ViewModelPatchUtil).GetMethod(nameof(ViewModelPatchUtil.ProxyExecuteCall));
170+
gen.Emit(OpCodes.Ldstr, method.Name);
171+
gen.Emit(OpCodes.Ldarg_0);
172+
gen.Emit(OpCodes.Call, proxyExecuteCall);
173+
gen.Emit(OpCodes.Ret);
174+
}
175+
163176
foreach (var mixin in _mixins[t])
164177
{
165178
// properties

UIExtenderLibModule/ViewModel/ViewModelPatchUtil.cs

+6
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,11 @@ public static void InitializeMixinsForModel(Type t, object instance)
3737
{
3838
UIExtenderLibModule.SharedInstance.ViewModelComponent.InitializeMixinsForViewModelInstance(t, instance);
3939
}
40+
41+
public static void ProxyExecuteCall(string name, object instance)
42+
{
43+
var method = instance.GetType().BaseType.GetMethod(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
44+
method.Invoke(instance, null);
45+
}
4046
}
4147
}

0 commit comments

Comments
 (0)