public override void OnGetValue( LocationInterceptionArgs args )
		{
			var instance = args.Instance ?? args.Location.PropertyInfo.DeclaringType;
			var apply = Apply( instance, args.Location.PropertyInfo );
			if ( apply )
			{
				var parameter = new DefaultValueParameter( instance, args.Location.PropertyInfo );
				var value = source( parameter );
				args.SetNewValue( args.Value = value );
			}
			else
			{
				base.OnGetValue( args );
			}
		}
		public override object Get( DefaultValueParameter parameter )
		{
			var now = currentTime().Now;
			var result = parameter.Metadata.PropertyType == typeof(DateTime) ? (object)now.DateTime : now;
			return result;
		}
		public override object Get( DefaultValueParameter parameter ) => provider.Get( hostType ?? parameter.Metadata.PropertyType );
		public override object Get( DefaultValueParameter parameter ) => value()?.ConvertTo( parameter.Metadata.PropertyType );
			public override object Get( DefaultValueParameter parameter ) => monitor.Apply() ? null : Item;