you can consider to use Polymorph instead If
or switch case
.
Create a base class ModelValidBase
for Vehicule
and Color
two types.
Pass parameters in constructor method, which you will use in future.
ValidationContext v
validtionContext.
object p
vaild parameter.
there is a abstract ValidationResult Dosomthing()
method fof subclass to implementate
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
implementation ModelValidBase
class and override ValidationResult Dosomthing
,make your logic in this class
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
implementation ModelValidBase
class and override ValidationResult Dosomthing
,make your logic in this class
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;
}
}
In the final step create dictionary<string, ModelValidBase>
and register VehiculeContext
and ColorContext
in the dictionary.
you can get the instance by the string name that can instead if else
or 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();
}
}