вы можете использовать вместо Polymorph If
или switch case
.
Создать базовый класс ModelValidBase
для Vehicule
и Color
двух типов.
Передать параметрыв методе конструктора, который вы будете использовать в будущем.
ValidationContext v
validtionContext. object p
параметр vaild.
существует метод abstract ValidationResult Dosomthing()
для подкласса для реализации
public abstract class ModelValidBase {
protected ValidationContext _validContext;
protected object parameterValue;
public ModelValidBase(ValidationContext v, object p)
{
_validContext = v;
parameterValue = p;
}
public abstract ValidationResult Dosomthing();
}
VehiculeContext
реализации ModelValidBase
класса иoverride ValidationResult Dosomthing
, сделайте свою логику в этом классе
public class VehiculeContext : ModelValidBase
{
public VehiculeContext(ValidationContext v, object p) : base(v, p)
{
}
public override ValidationResult Dosomthing()
{
MultiRetouchesEntities db = new MultiRetouchesEntities();
Vehicule vehicule = (Vehicule)(_validContext.ObjectInstance) ;
bool validateName = db.Vehicule.Any(x => x.Name == (string)parameterValue);
if (validateName == true)
{
return new ValidationResult("This vehicule already exists", new string[] { "Name" });
}
return ValidationResult.Success;
}
}
ColorContext
Реализация ModelValidBase
класса и override ValidationResult Dosomthing
, сделайте свою логику в этом классе
public class ColorContext : ModelValidBase
{
public ColorContext(ValidationContext v, object p) : base(v, p)
{
}
public override ValidationResult Dosomthing()
{
Color vehicule = (Color)_validContext;
//Do something with db.Color, for exemple
db.Color.Add(Color);
return ValidationResult.Success;
}
}
В финалешаг создать dictionary<string, ModelValidBase>
и зарегистрировать VehiculeContext
и ColorContext
в словаре.
вы можете получить экземпляр по строковому имени, которое может вместо if else
или switch case
control flow
public class MyCustomerAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
Dictionary<string, ModelValidBase> _registerTable = new Dictionary<string, ModelValidBase>();
_registerTable.Add("Vehicule", new VehiculeContext(validationContext,value));
_registerTable.Add("Color", new ColorContext(validationContext, value));
Type testType = validationContext.ObjectInstance.GetType();
ModelValidBase excuteValid;
if (!_registerTable.TryGetValue(testType.Name, out excuteValid))
{
//return a result when you didn't get context from the register table.
}
return excuteValid.Dosomthing();
}
}