/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}" /> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="settings"> /// Settings that define the dependency graph, change listeners /// and monitoring behaviour. /// </param> /// <returns>The root dependency node, that links to the targeted item.</returns> public static DependencyNode <T> CreateDependency <T>(DependencyNodeSettings <T> settings) { var node = WalkExpressionTree <T>(settings.TargetExpression.Body, settings.ObserveSubValueChanges, null); if (settings.ChangeHandler != null) { node.DependencyChanged += settings.ChangeHandler; } return(node); }
/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}" /> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="target"> /// The expression that declares the dependency chain from root /// to the target item or value. /// </param> /// <param name="changeHandler"> /// An optional event listener that is being invoked if the /// target value changes either through direct change, or because the dependency graph /// was changed because of a changed intermediary node. /// </param> /// <returns>The root dependency node, that links to the targeted item.</returns> /// <exception cref="ArgumentNullException"> /// If <paramref name="target" /> /// is a null reference. /// </exception> public static DependencyNode <T> CreateDependency <T>(Expression <Func <T> > target, EventHandler <DependencyChangeEventArgs <T> >?changeHandler) { if (target == null) { throw new ArgumentNullException(nameof(target)); } //create settings component var settings = new DependencyNodeSettings <T>(target); if (changeHandler != null) { settings.ChangeHandler = changeHandler; } //delegate to overload return(CreateDependency(settings)); }
/// <summary> /// Creates dependency chain of <see cref="DependencyNode{T}" /> instances for a given /// expression. /// </summary> /// <typeparam name="T">The type of the expression's compiled return value.</typeparam> /// <param name="settings"> /// Settings that define the dependency graph, change listeners /// and monitoring behaviour. /// </param> /// <returns>The root dependency node, that links to the targeted item.</returns> public static DependencyNode <T> Create <T>(DependencyNodeSettings <T> settings) => DependencyBuilder.CreateDependency(settings);