/// <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));
        }
Exemple #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));
        }
Exemple #3
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);
        }
        /// <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);
        }
        public void CallExtendExtendsChain(int extendCount)
        {
            // Arrange
            var data = CreateData();

            for (var i = 0; i < extendCount; ++i)
            {
                _resolver.Extend(new ReflectionResolver(nameof(SomeComplexClass.SubClass)));
            }

            // Act
            var value = _resolver.Resolve(data) as SomeComplexClass;

            // Assert
            Assert.NotNull(value);
            Assert.AreEqual(2, value.Value);
            Assert.AreEqual(2, CountChainLinks(_resolver));
        }
 /// <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));
 }