/// <summary> /// Attempt to resolve a realtionship from the given path. /// </summary> /// <param name="root">The root level contract to resolve the relationship from.</param> /// <param name="path">The path for to resolve on the relationship.</param> /// <param name="memberPath">The path that was resolved, or undefined if no path could be found.</param> /// <returns>true if the path was resolved correctly, false if not.</returns> bool TryResolve(IContract root, string path, ref MemberPath memberPath) { var index = path.IndexOf(".", StringComparison.Ordinal); if (index < 0) { var relationship = root.Relationship(path); if (relationship == null) { memberPath = null; return false; } memberPath = new MemberPath(relationship); return true; } return TryResolveRelationship(root, path.Substring(0, index), path.Substring(index + 1), ref memberPath); }
/// <summary> /// Attempt to resolve a realtionship from the given name and path. /// </summary> /// <param name="root">The root level contract to resolve the relationship from.</param> /// <param name="name">The name of the relationship to resolve.</param> /// <param name="path">The path for to resolve on the relationship.</param> /// <param name="memberPath">The path that was resolved, or undefined if no path could be found.</param> /// <returns>true if the path was resolved correctly, false if not.</returns> bool TryResolveRelationship(IContract root, string name, string path, ref MemberPath memberPath) { var relationship = root.Relationship(name); if (relationship == null) { memberPath = null; return false; } if (_contractResolver.TryResolve(relationship.RelatedTo, out root) == false) { memberPath = null; return false; } if (TryResolve(root, path, ref memberPath) == false) { return false; } memberPath = new MemberPath(relationship, memberPath); return true; }
/// <summary> /// Attempt to resolve the member path. /// </summary> /// <param name="path">The path to resolve.</param> /// <param name="memberPath">The member path to resolve.</param> /// <returns>true if the member path could be resolved, false if not.</returns> internal bool TryResolve(string path, out MemberPath memberPath) { memberPath = null; return TryResolve(_root, path, ref memberPath); }