public static void IsUnique <TOwnerVM, TItemVM>(
     this CollectionValidatorBuilder <TOwnerVM, TItemVM> builder,
     string errorMessage,
     object details = null
     )
     where TOwnerVM : IViewModel
     where TItemVM : IViewModel
 {
     IsUnique(
         builder,
         x => x,
         errorMessage,
         details
         );
 }
 public static void IsUnique <TOwnerVM, TItemDescriptor, T>(
     this CollectionValidatorBuilder <TOwnerVM, TItemDescriptor, T> builder, // TODO
     string errorMessage,
     object details = null
     )
     where TOwnerVM : IViewModel
     where TItemDescriptor : IVMDescriptor
 {
     builder.Custom <IViewModel <TItemDescriptor> >((args) => {
         args
         .Items
         .GroupBy(x => x.Kernel.GetValue(args.TargetProperty))
         .Where(g => g.Count() > 1)
         .SelectMany(g => g)
         .ForEach(item => {
             args.AddError(item, errorMessage, details);
         });
     });
 }
 public static void IsUnique <TOwnerVM, TItemVM, TKey>(
     this CollectionValidatorBuilder <TOwnerVM, TItemVM> builder,
     Func <TItemVM, TKey> keySelector,
     string errorMessage,
     object details = null
     )
     where TOwnerVM : IViewModel
     where TItemVM : IViewModel
 {
     builder.Custom(args => {
         args
         .Items
         .GroupBy(keySelector)
         .Where(g => g.Count() > 1)
         .SelectMany(g => g)
         .ForEach(item => {
             args.AddError(item, errorMessage, details);
         });
     });
 }