/// <summary> /// Register the methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); // this registers one method and the overloading is handled in the GetDefaultValue interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IDefaultValue>(x => x.DefaultValueFor("")), GetDefaultValue); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IDefaultValue>(x => x.RestoreToDefault("")), RestoreToDefault); }
/// <summary> /// Register methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); // this registers one method and the overloading is handled in the GetDescription interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IDescription>(x => x.DescriptionFor("")), GetDescription); }
/// <summary> /// Method to restore a property to its default /// </summary> /// <param name="interceptor">IExtensibleInterceptor responsible for the object</param> /// <param name="propertyInfo"></param> /// <param name="exception">out value to get an exception</param> private void RestoreToDefault(IExtensibleInterceptor interceptor, PropertyInfo propertyInfo, out Exception exception) { object defaultValue = null; exception = null; try { defaultValue = GetConvertedDefaultValue(propertyInfo); } catch (Exception ex) { _log.Warn().WriteLine(ex.Message); // Store the exception so it can be used exception = ex; } if (defaultValue != null) { interceptor.Set(propertyInfo.Name, defaultValue); return; } try { defaultValue = propertyInfo.PropertyType.CreateInstance(); interceptor.Set(propertyInfo.Name, defaultValue); } catch (Exception ex) { // Ignore creating the default type, this might happen if there is no default constructor. _log.Warn().WriteLine(ex.Message); } }
/// <summary> /// Register methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); // Use Lambda to make refactoring possible, this registers one method and the overloading is handled in the IsTaggedWith interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITagging>(x => x.IsTaggedWith("", null)), IsTaggedWith); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITagging>(x => x.GetTagValue("", null)), GetTagValue); }
/// <summary> /// Process the property, in our case set the default /// </summary> /// <param name="interceptor"></param> /// <param name="propertyInfo"></param> public override void InitProperty(IExtensibleInterceptor interceptor, PropertyInfo propertyInfo) { RestoreToDefault(interceptor, propertyInfo, out var ex); if (ex != null) { throw ex; } }
/// <summary> /// Register setter and methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); interceptor.RegisterSetter((int)CallOrder.Last, HasChangesSetter); // Use Lambdas to make refactoring possible interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IHasChanges>(x => x.ResetHasChanges()), ResetHasChanges); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IHasChanges>(x => x.HasChanges()), HasChanges); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IHasChanges>(x => x.IsChanged("")), IsChanged); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IHasChanges>(x => x.Changes()), Changes); }
/// <summary> /// Register methods and getter/setter /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); interceptor.RegisterSetter((int)CallOrder.First, TransactionalSetter); interceptor.RegisterGetter((int)CallOrder.First, TransactionalGetter); // Use Lambdas to make refactoring possible interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITransactionalProperties>(x => x.StartTransaction()), StartTransaction); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITransactionalProperties>(x => x.CommitTransaction()), CommitTransaction); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITransactionalProperties>(x => x.RollbackTransaction()), RollbackTransaction); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <ITransactionalProperties>(x => x.IsTransactionDirty()), IsTransactionDirty); }
/// <summary> /// Register methods and setter /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); // Map the default add / remove handler methods interceptor.RegisterMethod($"add_{nameof(PropertyChanged)}", AddPropertyChanged); interceptor.RegisterMethod($"remove_{nameof(PropertyChanged)}", RemovePropertyChanged); // This is not default, but used by EventOberservable (Dapplo.Utils) interceptor.RegisterMethod($"invoke_{nameof(PropertyChanged)}", InvokePropertyChanged); // Register the NotifyPropertyChangedSetter as a last setter, it will call the NPC event interceptor.RegisterSetter((int)CallOrder.Last, NotifyPropertyChangedSetter); }
/// <summary> /// Register setter and methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); interceptor.RegisterSetter((int)CallOrder.First, WriteProtectSetter); // Use Lambdas to make refactoring possible interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.StartWriteProtecting()), StartWriteProtecting); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.RemoveWriteProtection()), RemoveWriteProtection); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.StopWriteProtecting()), StopWriteProtecting); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.WriteProtect("")), WriteProtect); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.DisableWriteProtect("")), DisableWriteProtect); interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IWriteProtectProperties>(x => x.IsWriteProtected("")), IsWriteProtected); }
/// <summary> /// Process the property, in our case get the tags /// </summary> /// <param name="interceptor"></param> /// <param name="propertyInfo"></param> public override void InitProperty(IExtensibleInterceptor interceptor, PropertyInfo propertyInfo) { var customAttributes = Attribute.GetCustomAttributes(propertyInfo); foreach (var customAttribute in customAttributes) { if (!(customAttribute is TagAttribute tagAttribute)) { continue; } if (!_taggedProperties.TryGetValue(propertyInfo.Name, out var tags)) { tags = new Dictionary <object, object>(); _taggedProperties.Add(propertyInfo.Name, tags); } tags[tagAttribute.Tag] = tagAttribute.TagValue; } }
/// <summary> /// Register setter and methods /// </summary> /// <param name="interceptor"></param> public override void Initialize(IExtensibleInterceptor interceptor) { base.Initialize(interceptor); // Use Lambdas to make refactoring possible interceptor.RegisterMethod(ExpressionExtensions.GetMemberName <IShallowCloneable <T> >(x => x.ShallowClone()), Clone); }
/// <summary> /// After property initialization /// </summary> /// <param name="interceptor"></param> public virtual void AfterInitialization(IExtensibleInterceptor interceptor) { }
/// <summary> /// Handle every property /// </summary> /// <param name="interceptor"></param> /// <param name="propertyInfo"></param> public virtual void InitProperty(IExtensibleInterceptor interceptor, PropertyInfo propertyInfo) { }
/// <summary> /// Initialize the extension, e.g. register methods etc. /// </summary> /// <param name="interceptor"></param> public virtual void Initialize(IExtensibleInterceptor interceptor) { }