private static MethodReference CreateFuncCtorRef(Cut cut) { var mr = new MethodReference(".ctor", cut.Import(StandardTypes.Void), cut.Import(WellKnownTypes.Func_ObjectArray_Object)) { HasThis = true }; mr.Parameters.Add(new ParameterDefinition(cut.Import(StandardTypes.Object))); mr.Parameters.Add(new ParameterDefinition(cut.Import(StandardTypes.IntPtr))); return(mr); }
private static FieldReference GetInstanceAspectField(AspectDefinition aspect, TypeDefinition source, Cut cut) { var type = source; var fieldName = $"{Constants.AspectInstanceFieldPrefix}{aspect.Host.FullName}"; var field = FindField(type, fieldName); if (field == null) { field = new FieldDefinition(fieldName, FieldAttributes.Family, cut.Import(aspect.Host)); type.Fields.Add(field); InjectInitialization(GetInstanсeAspectsInitializer(type, cut), field, c => c.CreateAspectInstance(aspect)); } return(field); }