protected virtual Cut LoadArgumentsArgument(Cut pc, AdviceArgument parameter)
        {
            var elements = _method.Parameters.Select <ParameterDefinition, PointCut>(p => il =>
                                                                                     il.Load(p).Cast(p.ParameterType, StandardTypes.Object)
                                                                                     ).ToArray();

            return(pc.CreateArray(StandardTypes.Object, elements));
        }
Example #2
0
        protected virtual Cut LoadInjectionsArgument(Cut pc, AdviceArgument parameter)
        {
            var elements = _injection.Triggers.Select <CustomAttribute, PointCut>(ca => il =>
            {
                var ctor = ca.Constructor.Resolve();

                il = il.Call(ctor, new PointCut(ilc =>
                {
                    foreach (var caa in ca.ConstructorArguments)
                    {
                        ilc = ilc.Value(caa);
                    }
                    return(ilc);
                }));

                if (ca.Properties.Any() || ca.Fields.Any())
                {
                    var catype = ca.AttributeType.Resolve();

                    var attrvar = new VariableDefinition(il.Import(ca.AttributeType));
                    _target.Body.Variables.Add(attrvar);
                    _target.Body.InitLocals = true;

                    il = il.Store(attrvar);

                    foreach (var namedArg in ca.Properties)
                    {
                        var prop = catype.Properties.First(p => p.Name == namedArg.Name).SetMethod;

                        il = il
                             .Load(attrvar)
                             .Call(prop, ilp => ilp.Value(namedArg.Argument));
                    }

                    foreach (var namedArg in ca.Fields)
                    {
                        var field = catype.Fields.First(p => p.Name == namedArg.Name);

                        il = il
                             .Load(attrvar)
                             .Store(field, ilf => ilf.Value(namedArg.Argument));
                    }
                    il = il.Load(attrvar);
                }

                return(il);
            }
                                                                                  ).ToArray();

            return(pc.CreateArray(StandardTypes.Attribute, elements));
        }
        protected virtual Cut LoadInjectionsArgument(Cut pc, AdviceArgument parameter)
        {
            var elements = _injection.Triggers.Select <CustomAttribute, PointCut>(ca => il =>
            {
                var ctor = ca.Constructor.Resolve();

                il = il.Call(ctor, new PointCut(ilc =>
                {
                    foreach (var caa in ca.ConstructorArguments)
                    {
                        ilc = ilc.Value(caa);
                    }
                    return(ilc);
                }));

                if (ca.Properties.Any() || ca.Fields.Any())
                {
                    var catype = ca.AttributeType.Resolve();

                    foreach (var namedArg in ca.Properties)
                    {
                        var prop = catype.FindProperty(namedArg.Name).SetMethod;

                        il = il
                             .Dup()
                             .Call(prop, ilp => ilp.Value(namedArg.Argument));
                    }

                    foreach (var namedArg in ca.Fields)
                    {
                        var field = catype.FindField(namedArg.Name);

                        il = il
                             .Dup()
                             .Store(field, ilf => ilf.Value(namedArg.Argument));
                    }
                }

                return(il);
            }
                                                                                  ).ToArray();

            return(pc.CreateArray(StandardTypes.Attribute, elements));
        }