public void Adapt(IParameterContext context) { var pushParameterArguments = context; var parameterType = pushParameterArguments.Parameter.ParameterType; if (parameterType.IsValueType || parameterType is GenericParameter) { pushParameterArguments.CilWorker.Emit(OpCodes.Box); } var worker = pushParameterArguments.CilWorker; worker.Emit(OpCodes.Stloc, pushParameterArguments.CurrentArgument); // If necessary, wrap the old dependency in the adapter if (parameterType == pushParameterArguments.InterfaceType) { _adaptParameter.Adapt(pushParameterArguments); } var currentArguments = pushParameterArguments.CurrentArguments; var currentArgument = pushParameterArguments.CurrentArgument; var pushMethod = pushParameterArguments.CurrentMethod; worker.Emit(OpCodes.Ldloc, currentArguments); worker.Emit(OpCodes.Ldloc, currentArgument); worker.Emit(OpCodes.Callvirt, pushMethod); }
public void Adapt(IParameterContext context) { var IL = context.CilWorker; var adapterConstructor = context.AdapterConstructor; var targetDependency = context.TargetDependency; var currentArgument = context.CurrentArgument; var interfaceType = context.InterfaceType; IL.Emit(OpCodes.Ldloc, currentArgument); IL.Emit(OpCodes.Unbox_Any, targetDependency); IL.Emit(OpCodes.Newobj, adapterConstructor); IL.Emit(OpCodes.Isinst, interfaceType); IL.Emit(OpCodes.Stloc, currentArgument); }
public void Adapt(IParameterContext context) { var pushParameterArguments = context; var parameterType = pushParameterArguments.Parameter.ParameterType; if (parameterType.IsValueType || parameterType is GenericParameter) pushParameterArguments.CilWorker.Emit(OpCodes.Box); var worker = pushParameterArguments.CilWorker; worker.Emit(OpCodes.Stloc, pushParameterArguments.CurrentArgument); // If necessary, wrap the old dependency in the adapter if (parameterType == pushParameterArguments.InterfaceType) _adaptParameter.Adapt(pushParameterArguments); var currentArguments = pushParameterArguments.CurrentArguments; var currentArgument = pushParameterArguments.CurrentArgument; var pushMethod = pushParameterArguments.CurrentMethod; worker.Emit(OpCodes.Ldloc, currentArguments); worker.Emit(OpCodes.Ldloc, currentArgument); worker.Emit(OpCodes.Callvirt, pushMethod); }
private static object GeValueEmpty(IParameterContext parameterContext) { return null; }
public CommandParameter(IParameterContext argumentContext, Func <object, object> getter, Action <object, object> setter) { this.Context = argumentContext; this.getter = getter; this.setter = setter; }
private static object GeValueEmpty(IParameterContext parameterContext) { return(null); }