С аннотациями данных теперь легко локализовать сообщения об ошибках, используя файлы Resource.resx, например, такие:
public class Student
{
. . .
[Required(ErrorMessageResourceName ="Required",
ErrorMessageResourceType = typeof(StudentResources))]
[StringLength(16)]
[Display(Name = "FirstName", ResourceType = typeof(StudentResources))]
public string FirstName { get; set; }
. . .
}
Теперь, допустим, я хочу проверить, выполнил ли студент Платеж за данный месяц и год:
public bool CheckIfAlreadyPaid(Payment payment)
{
return repository.GetPayments().Any(p => p.StudentId == payment.StudentId &&
p.Month == payment.Month &&
p.Year == payment.Year);
}
Если он уже произвел Платеж, я делаю следующее в слое «Услуги»:
if (CheckIfAlreadyPaid(payment))
{
modelState.AddModelError("AlreadyPaid",
Resources.Views.Payment.PaymentCreateResources.AlreadyPaid);
}
Это работает, но я не уверен в том, что смогу сослаться на файл Resource в слое Services.
Существует ли стандартный или лучший способ локализации сообщений об ошибках, которые не привязаны к свойствам модели (аннотации данных) - ошибки, возникающие из правил бизнес-логики? Стоит ли мне добавить эти ошибки в ModelStateDictionary?