public void ConfigureTypeBuilder(ClassOrInterfaceExportBuilder classOrInterfaceExportBuilder) { if (classOrInterfaceExportBuilder is ClassExportBuilder) { classOrInterfaceExportBuilder.WithCodeGenerator <ClassOrInterfaceExportBuilder, ReflectionMemberAttachmentClassCodeGenerator>(). WithAllMembers(); } else { classOrInterfaceExportBuilder.WithCodeGenerator <ClassOrInterfaceExportBuilder, ReflectionMemberAttachmentInterfaceCodeGenerator>(). WithAllMembers(); } }
public static ClassOrInterfaceExportBuilder WithAllMembers(this ClassOrInterfaceExportBuilder classOrInterfaceExportBuilder) { return(classOrInterfaceExportBuilder.WithAllProperties().WithAllMethods().WithAllFields()); }
public static void WithAllWithInference(this ClassOrInterfaceExportBuilder exportBuilder, ITypeInferer typeInferer, ExportContext exportContext, WithAllBuilderCallbacks builderCallbacks = null) { if (builderCallbacks == null) { builderCallbacks = new WithAllBuilderCallbacks(); } /* * remember that using any of the overloads clears the current inferrer * public static ISupportsInferring<T> InferType<T>(this ISupportsInferring<T> x, Func<T, TypeResolver, string> inferrer) * { * x.TypeInferers.StringResolver = inferrer; * return x; * } * * so if callback wants to add own it has to come after */ // for parameter inference var typeBluePrint = exportContext.Project.Blueprint(exportBuilder.Type); exportBuilder.WithAllProperties(propertyExportBuilder => { propertyExportBuilder.InferType((mi, resolver) => { return(typeInferer.PropertyInfer(mi, resolver)); }); if (builderCallbacks.PropertyCallback != null) { builderCallbacks.PropertyCallback(propertyExportBuilder); } } ); exportBuilder.WithAllFields(propertyExportBuilder => { propertyExportBuilder.InferType((mi, resolver) => { return(typeInferer.FieldInfer(mi, resolver)); }); if (builderCallbacks.FieldCallback != null) { builderCallbacks.FieldCallback(propertyExportBuilder); } }); exportBuilder.WithAllMethods(methodExportBuilder => { methodExportBuilder.InferType((mi, resolver) => { return(typeInferer.MethodInfer(mi, resolver)); }); var parameters = methodExportBuilder.Member.GetParameters(); foreach (var parameter in parameters) { // Given that cannot do via the fluent api ( has to be strongly typed ) // can create the attribute ! var parameterAttribute = typeBluePrint.ForMember(parameter, true); parameterAttribute.InferType((pi, resolver) => { return(typeInferer.ParameterInfer(pi, resolver)); }); } if (builderCallbacks.MethodCallback != null) { builderCallbacks.MethodCallback(methodExportBuilder); } }); }
public void ConfigureTypeBuilder(ClassOrInterfaceExportBuilder classOrInterfaceExportBuilder) { classOrInterfaceExportBuilder.WithAllWithInference(nullableInferer, exportContext); }