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 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);
        }
Пример #5
0
 private static object GeValueEmpty(IParameterContext parameterContext)
 {
     return null;
 }
Пример #6
0
 public CommandParameter(IParameterContext argumentContext, Func <object, object> getter, Action <object, object> setter)
 {
     this.Context = argumentContext;
     this.getter  = getter;
     this.setter  = setter;
 }
Пример #7
0
 private static object GeValueEmpty(IParameterContext parameterContext)
 {
     return(null);
 }