IEnumerable<XPMemberInfo> GetMembers(AuditTrailRule auditTrailRule) {
     var hasContext = !string.IsNullOrEmpty(auditTrailRule.MemberContext);
     if (!hasContext && auditTrailRule.AuditMemberStrategy!=AuditMemberStrategy.None) {
         return GetAllPublicProperties(auditTrailRule.TypeInfo.Type,info => auditTrailRule.AuditMemberStrategy == AuditMemberStrategy.AllMembers?info.Members:info.OwnMembers);
     }
     if (hasContext) {
         var membersContexts =((IModelApplicationAudiTrail) Application.Model).AudiTrail.AuditTrailMembersContextGroup[
                 auditTrailRule.MemberContext].Where(context=>context.ModelClass.TypeInfo.IsAssignableFrom(auditTrailRule.TypeInfo));
         var classInfos =membersContexts.Select(context =>
                 new{ClassInfo = XpandModuleBase.Dictiorary.GetClassInfo(context.ModelClass.TypeInfo.Type),context.Members});
         return classInfos.SelectMany(arg => arg.Members.Select(member => arg.ClassInfo.FindMember(member.ModelMemberName)));
     }
     return Enumerable.Empty<XPMemberInfo>();
 }
        IEnumerable <XPMemberInfo> GetMembers(AuditTrailRule auditTrailRule)
        {
            var hasContext = !string.IsNullOrEmpty(auditTrailRule.MemberContext);

            if (!hasContext && auditTrailRule.AuditMemberStrategy != AuditMemberStrategy.None)
            {
                return(GetAllPublicProperties(auditTrailRule.TypeInfo.Type, info => auditTrailRule.AuditMemberStrategy == AuditMemberStrategy.AllMembers?info.Members:info.OwnMembers));
            }
            if (hasContext)
            {
                var auditTrailMembersContexts = ((IModelApplicationAudiTrail)Application.Model).AudiTrail.AuditTrailMembersContextGroup[auditTrailRule.MemberContext];
                var membersContexts           = auditTrailMembersContexts.Where(context => context.ModelClass.TypeInfo.IsAssignableFrom(auditTrailRule.TypeInfo));
                var classInfos = membersContexts.Select(context => new{ ClassInfo = XpandModuleBase.Dictiorary.GetClassInfo(context.ModelClass.TypeInfo.Type), context.Members });
                return(classInfos.SelectMany(arg => arg.Members.Select(member => arg.ClassInfo.FindMember(member.ModelMemberName))));
            }
            return(Enumerable.Empty <XPMemberInfo>());
        }