Beispiel #1
0
 public AttachedMounterImpl(MounterInfo <TDerivedTarget, TDerivedProperty> propertyInfo,
                            Func <Mounter <TDerivedTarget, TDerivedProperty>, TDerivedProperty> constructor,
                            Action <TDerivedProperty> initializer)
 {
     Init(propertyInfo.Name, GetStoredProperty, SetStoredProperty, constructor, initializer);
     _declaringType = propertyInfo.DeclaringType;
 }
Beispiel #2
0
            public MounterImpl(MounterInfo <TDerivedTarget, TDerivedProperty> propertyInfo,
                               Func <Mounter <TDerivedTarget, TDerivedProperty>, TDerivedProperty> constructor,
                               Action <TDerivedProperty> initializer)
            {
                Debug.Assert(constructor != null);

                var name   = propertyInfo.Name;
                var setter = GetSetter(name);

                if (setter == null)
                {
                    throw new ArgumentException(DiagnosticMessages.Common_InvalidGetterExpression, nameof(propertyInfo));
                }
                Init(name, propertyInfo.Getter.Compile(), setter, constructor, initializer);
            }
Beispiel #3
0
        public Mounter <TDerivedTarget, TDerivedProperty> RegisterAttached <TDerivedTarget, TDerivedProperty>(
            Expression <Func <TDerivedTarget, TDerivedProperty> > getter,
            Func <Mounter <TDerivedTarget, TDerivedProperty>, TDerivedProperty> constructor,
            Action <TDerivedProperty> initializer = null)
            where TDerivedTarget : class, TTarget
            where TDerivedProperty : class, TProperty
        {
            Debug.Assert(getter != null);
            var propertyInfo = MounterInfo <TDerivedTarget, TDerivedProperty> .GetAttachedPropertyInfo(getter);

            if (propertyInfo == null)
            {
                throw new ArgumentException(DiagnosticMessages.Common_InvalidGetterExpression);
            }

            var info   = propertyInfo.Value;
            var result = new AttachedMounterImpl <TDerivedTarget, TDerivedProperty>(info, constructor, initializer);

            Register(result);
            return(result);
        }