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)); }
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)); }