public WpfPipelineProperty
 (
     IPropertyChangeRaiser propertyChanged,
     Expression <Func <TType> > propertyExpression,
     AssignablePipelineStage <TType>?setter
 )
     : this(propertyChanged, propertyExpression, setter, setter)
 {
 }
        public WpfPipelineProperty
        (
            IPropertyChangeRaiser propertyChanged,
            Expression <Func <TType> > propertyExpression,
            IPipelineStage <TType> getter,
            AssignablePipelineStage <TType>?setter
        )
        {
            PropertyChanged = propertyChanged ?? throw new ArgumentNullException(nameof(propertyChanged));
            PropertyName    = GetPropertyNameFromExpression(propertyExpression);
            Getter          = getter ?? throw new ArgumentNullException(nameof(getter));
            Setter          = setter;

            Reaction = getter.CreateReaction(RaisePropertyChangedOnValueChanged);
        }