private static Dictionary <MemberInfoIdentity, MethodDescriptor> GetMethodsAttributes(Type type)
        {
            Dictionary <MemberInfoIdentity, MethodDescriptor> methodAttributes = new Dictionary <MemberInfoIdentity, MethodDescriptor>();

            foreach (MethodInfo method in type.GetMethods(BindingFlagsSet.AllInstance).Where(m => !m.IsEventAccessor() && (m.IsPublic || m.IsFinal)))
            {
                MethodOperationStrategy operationStrategy = MethodOperationStrategy.Auto;

                if (method.IsDefinedOnMethodOrProperty(typeof(ChangeTrackingIgnoreOperationAttribute), true) ||
                    method.IsDefinedOnMethodOrProperty(typeof(ChangeTrackingIgnoreField), true))
                {
                    operationStrategy = MethodOperationStrategy.Never;
                }

                else if (method.IsDefined(typeof(ChangeTrackingForceOperationAttribute), true))
                {
                    operationStrategy = MethodOperationStrategy.Always;
                }

                string operationName = method.GetCustomAttributeFromMethodOrProperty <OperationNameAttribute>(false).Select(a => a.Name).FirstOrDefault();

                methodAttributes.Add(new MemberInfoIdentity(method), new MethodDescriptor(operationStrategy, operationName));
            }

            return(methodAttributes);
        }
 public MethodDescriptor(MethodOperationStrategy methodOperationStrategy, string operationName = null)
 {
     this.MethodOperationStrategy = methodOperationStrategy;
     this.OperationName           = operationName;
 }