/// <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));
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 6
0
        /// <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);
 }