| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using System.Reflection;
- using TargetMethodType = System.Reflection.MethodBase;
- namespace com.bbbirder.injection
- {
-
- public struct InjectionInfo
- {
- /// <summary>
- /// indicate the method to be injected
- /// </summary>
- public TargetMethodType InjectedMethod { get; private set; }
- //TODO : FixingDelegate?
- // use one of the following to fix target method
- public MethodInfo FixingMethod { get; private set; }
- public Delegate FixingDelegate { get; private set; }
- public Type DryInjectAssmemble { get; private set; }
- public string DryInjectMethodName { get; private set; }
- public MethodInfo DryInjectMethod { get; private set; }
- public Action<Delegate> OriginReceiver;
- internal Action onStartFix;
- public static InjectionInfo Create(TargetMethodType methodToReplace, MethodInfo methodToProvide, Action<Delegate> originMethodReceiver = null)
- {
- DebugHelper.IsNotNull(methodToReplace,"methodToReplace is null");
- DebugHelper.IsNotNull(methodToProvide,"methodToProvide is null");
- return new InjectionInfo()
- {
- InjectedMethod = methodToReplace,
- FixingMethod = methodToProvide,
- OriginReceiver = originMethodReceiver,
- };
- }
- public static InjectionInfo Create(TargetMethodType methodToReplace, Delegate methodToProvide, Action<Delegate> originMethodReceiver = null)
- {
- DebugHelper.IsNotNull(methodToReplace,"methodToReplace is null");
- DebugHelper.IsNotNull(methodToProvide,"methodToProvide is null");
- return new InjectionInfo()
- {
- InjectedMethod = methodToReplace,
- FixingDelegate = methodToProvide,
- OriginReceiver = originMethodReceiver,
- };
- }
- public static InjectionInfo Create<T>(T methodToReplace, T methodToProvide, Action<T> originMethodReceiver = null) where T : Delegate
- {
- DebugHelper.IsNotNull(methodToReplace, "methodToReplace is null");
- DebugHelper.IsNotNull(methodToProvide, "methodToProvide is null");
- return new InjectionInfo()
- {
- InjectedMethod = methodToReplace.Method,
- FixingDelegate = methodToProvide,
- OriginReceiver = f => originMethodReceiver?.Invoke((T)f),
- };
- }
- public static InjectionInfo Create(Type assembleName, string filedName, MethodInfo methodToProvide)
- {
- DebugHelper.IsNotNull(methodToProvide, "methodToProvide is null");
- return new InjectionInfo()
- {
- DryInjectAssmemble = assembleName,
- DryInjectMethodName = filedName,
- DryInjectMethod = methodToProvide
- };
- }
- public static InjectionInfo Create(Action onStartFix){
- return new InjectionInfo(){
- onStartFix = onStartFix,
- };
- }
- }
- }
|