public void Allow(object instance, PropertyComparator customComparator) { if (!_customInstancePropertyComparisons.ContainsKey(instance)) { _customInstancePropertyComparisons.Add(instance, new List <PropertyComparator>()); } _customInstancePropertyComparisons[instance].Add(customComparator); }
private bool IsAllowed(IEnumerable <PropertyComparator> comparators, GraphNode leftNode, GraphNode rightNode) { if (comparators.Select(c => c.Property).Contains(rightNode.Property)) { PropertyComparator comparator = comparators.First(c => c.Property == rightNode.Property); return((bool)comparator.Comparator.DynamicInvoke(leftNode.ObjectValue, rightNode.ObjectValue)); } return(false); }
private void CollectMethods(Type type) { foreach (MethodInfo m in type.GetMethods()) { MethodComparator cmp = new MethodComparator(m); if (!mServiceMethods.Contains(cmp) && !mClientMethods.Contains(cmp) && !mNeutralMethods.Contains(cmp)) { // még nem detektált metódus OperationContractAttribute ocAnnotation = TypeHelper.GetAttribute <OperationContractAttribute>(m); if (ocAnnotation == null) { if (mWellKnownObjectMode == WellKnownObjectModeEnum.PerSession && typeof(IDisposable).IsAssignableFrom(type) && m.Name.Equals("Dispose")) { // perSession módban IDisposable-t nem dolgozunk fel, mert már implementálva van a ProxyBase-ben } else if (!m.IsSpecialName) { mNeutralMethods.Add(cmp); // a contract-ban nem vesz részt, de az interface-en valahol rajta van } } else if (ocAnnotation.Direction.Equals(OperationDirectionEnum.ServerSide)) { mServiceMethods.Add(cmp); } else { mClientMethods.Add(cmp); } } } foreach (PropertyInfo pi in type.GetProperties()) { PropertyComparator pc = new PropertyComparator(pi); if (!mNeutralProperties.Contains(pc)) { mNeutralProperties.Add(pc); } } foreach (EventInfo ei in type.GetEvents()) { mNeutralEvents.Add(new EventComparator(ei)); } if (type.GetInterfaces().Length > 0) { foreach (Type cls in type.GetInterfaces()) { CollectMethods(cls); } } }
/// <summary> /// Writes the abstract properties. /// </summary> /// <param name="prs">The property comparators.</param> /// <param name="stream">The stream.</param> public static void WriteAbstractProperties(IList <PropertyComparator> prs, Stream stream) { if (prs == null) { ThrowHelper.ThrowArgumentNullException("prs"); } if (stream == null) { ThrowHelper.ThrowArgumentNullException("stream"); } IEnumerator <PropertyComparator> iterator = prs.GetEnumerator(); while (iterator.MoveNext()) { PropertyComparator pc = iterator.Current; Write(stream, NEW_LINE_BYTES); Write(stream, CODE_PUBLIC_METHOD); Write(stream, CODE_ABSTRACT_METHOD); Write(stream, pc.PropertyInfo.PropertyType.FullName); Write(stream, SPACE); Write(stream, pc.PropertyInfo.Name); Write(stream, NEW_LINE_BYTES); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, LEFT_CURLY_BRACE); if (pc.GetMethod != null) { Write(stream, NEW_LINE_BYTES); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, "get;"); } if (pc.SetMethod != null) { Write(stream, NEW_LINE_BYTES); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, "set;"); } Write(stream, NEW_LINE_BYTES); Write(stream, TAB_SPACE); Write(stream, TAB_SPACE); Write(stream, RIGHT_CURLY_BRACE); Write(stream, NEW_LINE_BYTES); } }
public void AllowOnType(PropertyComparator customComparator) { _customTypePropertyComparisons.Add(customComparator); }