/// <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> /// 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)); }