public UniquePropertyValidator(
            IRepository repository,
            IInstanceQueryData <T> queryData)
            : base("Property {PropertyName} should be unique!")
        {
            Contract.Assert(repository != null);
            Contract.Assert(queryData != null);

            this.repository = repository;
            this.queryData  = queryData;
        }
        public static IRuleBuilderOptions <T, TProperty> Uniqness <T, TProperty, TBase>(
            this IRuleBuilderOptions <T, TProperty> ruleBuilder,
            IRepository repository,
            IInstanceQueryData <TBase> queryData)
            where T : class, IEntity
            where TBase : class, IEntity
        {
            var validator = new UniquePropertyValidator <TBase>(repository, queryData);

            ruleBuilder.SetValidator(validator);

            // TODO: use state
            /*validator.CustomStateProvider = t => new ValidationFailureState(ViolationCodeNames.NonUniqueState);*/
            return(ruleBuilder);
        }