/// <inheritdoc /> protected override IBindingResolverChain AddToChain(IBindingResolverChain resolver, string property) { // Special function '.LastActivity[MountActivity]' var lastActivity = _lastActivityRegex.Match(property); if (lastActivity.Success) { return(lastActivity.Groups["typed"].Success ? resolver.Extend(new DelegateResolver(source => (source as IProcess)?.LastActivity(lastActivity.Groups["name"].Value))) : resolver.Extend(new DelegateResolver(source => (source as IProcess)?.LastActivity()))); } resolver = resolver.Extend(new PartLinkShortCut()); if (property == nameof(IIdentity.Identifier)) { return(resolver.Extend(new IdentifierShortCut())); } if (property == nameof(ProductType) || property == nameof(ProductInstance.Type)) { return(resolver.Extend(new ProductResolver(property))); } return(base.AddToChain(resolver, property)); }
/// <inheritdoc /> protected override IBindingResolverChain AddToChain(IBindingResolverChain resolver, string property) { resolver = resolver.Extend(new PartLinkShortCut()); if (property == nameof(IIdentity.Identifier)) { return(resolver.Extend(new IdentifierShortCut())); } var wpResolver = resolver as WorkplanResolver; if (wpResolver == null) { return(base.AddToChain(resolver, property)); } var match = _wpOperationRegex.Match(property); if (!match.Success) { return(base.AddToChain(resolver, property)); } var argument = match.Groups["name"].Value; var stepResolver = new StepResolver(argument); return(resolver.Append(stepResolver)); }
/// <summary> /// Append resolver to a fully constructed chain /// </summary> /// <returns>The new end of the chain</returns> public static IBindingResolverChain Append(this IBindingResolverChain resolver, IBindingResolverChain nextResolver) { var last = resolver; while (last.NextResolver != null) { last = last.NextResolver; } last.Extend(nextResolver); return(nextResolver); }
/// <summary> /// Insert resolve into the chain /// </summary> public static IBindingResolverChain Insert(this IBindingResolverChain resolver, IBindingResolverChain insertedResolver) { var next = resolver.NextResolver; resolver.Extend(insertedResolver); if (next != null) { insertedResolver.Extend(next); } return(insertedResolver); }
private int CountChainLinks(IBindingResolverChain chain) { var links = 0; var currentChainLink = chain; while (currentChainLink != null) { ++links; currentChainLink = currentChainLink.NextResolver; } return(links); }
/// <summary> /// Create resolver for a property /// </summary> protected virtual IBindingResolverChain AddToChain(IBindingResolverChain resolver, string property) { var match = _propertyRegex.Match(property); // Double link new resolver resolver = resolver.Extend(new ReflectionResolver(match.Groups["property"].Value)); // Insert element for index resolution if (match.Groups["indexer"].Success) { resolver = resolver.Extend(new IndexResolver(match.Groups["index"].Value)); } return(resolver); }
public void Setup() { _resolver = new ReflectionResolver(nameof(SomeComplexClass.SubClass)); }
/// <summary> /// Remove a binding resolver and link its previous and next resolver directly /// </summary> /// <returns>The next resolver</returns> public static IBindingResolverChain Remove(this IBindingResolverChain resolver) { return(resolver.PreviousResolver.Extend(resolver.NextResolver)); }
/// <summary> /// Replace resolver with a different instance /// </summary> public static IBindingResolverChain Replace(this IBindingResolverChain toReplace, IBindingResolverChain replaceWith) { toReplace.PreviousResolver.Extend(replaceWith); return(replaceWith.Extend(toReplace.NextResolver)); }
/// <summary> /// Extend current resolver with next resolver /// </summary> /// <returns>The next resolver for fluent API</returns> public static IBindingResolverChain Extend(this IBindingResolverChain resolver, IBindingResolverChain nextResolver) { resolver.NextResolver = nextResolver; nextResolver.PreviousResolver = resolver; return(nextResolver); }