public static IInterception Create(PropertyChangedInterceptor propertyChangedInterceptor, IInvocation invocation, FireOptions fireOption, ILog log) { if(invocation.IsPropertyChangedAdd()) return new PropertyChangedAddInterception(propertyChangedInterceptor, invocation); if(invocation.IsPropertyChangedRemove()) return new PropertyChangedRemoveInterception(propertyChangedInterceptor, invocation); if(invocation.IsPropertySetter() && FireOptions.OnlyOnChange == fireOption) return new OnlyOnChangePropertySetterInterception(propertyChangedInterceptor, invocation, log).WrapWith( new PropertyIsINotifyInterception(propertyChangedInterceptor, invocation)); if(invocation.IsPropertySetter()) return new PropertySetterInterception(propertyChangedInterceptor, invocation).WrapWith( new PropertyIsINotifyInterception(propertyChangedInterceptor, invocation)); return new InvocationInterception(invocation); }