/// <summary> /// Create a default <see cref="MessageDescription"/> with all the properties added by their hashcode /// </summary> /// <returns>A new instance of <see cref="MessageDescription"/> representing the type</returns> public static MessageDescription DefaultFor <T>() { IMessageDescriptionBuilderFor <T> builder = new MessageDescriptionBuilderFor <T>(typeof(T).Name); builder = builder.WithAllProperties(); return(builder.Build()); }
/// <summary> /// Start building a description for /// </summary> /// <returns>A new instance of <see cref="MessageDescription"/> representing the type</returns> public static MessageDescription For <T>(Func <IMessageDescriptionBuilderFor <T>, IMessageDescriptionBuilderFor <T> > builderCallback) { IMessageDescriptionBuilderFor <T> builder = new MessageDescriptionBuilderFor <T>(typeof(T).Name); builder = builderCallback(builder); return(builder.Build()); }
/// <inheritdoc/> public IMessageDescriptionBuilderFor <T> WithAllProperties() { var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); var propertyDescriptionBuilders = properties.Select(_ => new PropertyDescriptionBuilder(_, _.Name, null, 0)).ToArray(); var messageDescriptionBuilder = new MessageDescriptionBuilderFor <T>(_name, propertyDescriptionBuilders); return(messageDescriptionBuilder); }
/// <inheritdoc/> public IMessageDescriptionBuilderFor <T> Property <TProp>(Expression <Func <TProp> > property, Func <IPropertyDescriptionBuilder, IPropertyDescriptionBuilder> propertyDescriptionBuilderCallback) { var propertyInfo = property.GetPropertyInfo(); IPropertyDescriptionBuilder propertyDescriptionBuilder = new PropertyDescriptionBuilder(propertyInfo, propertyInfo.Name, null, 0); propertyDescriptionBuilder = propertyDescriptionBuilderCallback(propertyDescriptionBuilder); var propertyDescriptionBuilders = new List <IPropertyDescriptionBuilder>(_propertyDescriptionBuilders); propertyDescriptionBuilders.Add(propertyDescriptionBuilder); var messageDescriptionBuilder = new MessageDescriptionBuilderFor <T>(_name, propertyDescriptionBuilders); return(messageDescriptionBuilder); }