/// <summary> /// Property mapper /// The same properties are read from the system level, the user level, and the document level configuration. /// User level properties can override system level properties while document level properties are specific /// only for a single document /// </summary> /// <param name="system"></param> /// <param name="user"></param> /// <param name="document"></param> private void SetAutoConfigProperties(Docx2TexAutoConfig system, Docx2TexAutoConfig user, Docx2TexAutoConfig document) { // all public instance properties var properties = this.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (var prop in properties) { // properties that has the Docx2TexAutoConfigAttribute attribute if (prop.GetCustomAttributes(typeof(Docx2TexAutoConfigAttribute), false).Length > 0) { var systemPropVal = prop.GetValue(system, null); var userPropVal = user != null?prop.GetValue(user, null) : null; var documentPropVal = document != null?prop.GetValue(document, null) : null; // if document level property is set, then it wins. If not then try user level. // If no user level property found then user the system level property. var resultVal = documentPropVal != null ? documentPropVal : (userPropVal != null ? userPropVal : systemPropVal); prop.SetValue(this, resultVal, null); } } }
/// <summary> /// Constructore that does the job /// </summary> /// <param name="system"></param> /// <param name="user"></param> /// <param name="document"></param> protected Docx2TexAutoConfig(Docx2TexAutoConfig system, Docx2TexAutoConfig user, Docx2TexAutoConfig document) { SetAutoConfigProperties(system, user, document); }