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