Привет, у меня есть то, что должно быть простым вопросом. У меня есть набор проверок, которые используют System.CompontentModel.DataAnnotations. У меня есть некоторые проверки, которые характерны для определенных моделей представлений, поэтому мне удобно иметь код проверки в том же файле, что и мои модели (как в файле AccountModels.cs по умолчанию, который поставляется с MVC2). Но у меня есть некоторые общие проверки, которые также применимы к нескольким моделям (например, действительный формат адреса электронной почты). Когда я вырезал / вставил эту проверку во вторую модель, которая в ней нуждается, конечно, я получаю ошибку дублирующегося определения, потому что они находятся в одном пространстве имен (projectName.Models). Поэтому я подумал об удалении общих проверок для отдельного класса в пространстве имен, ожидая, что все мои модели представлений смогут получить доступ к проверкам оттуда. Неожиданно проверки больше не доступны. Я проверил, что они все еще находятся в одном пространстве имен, и все они общедоступны. Я не ожидал, что мне понадобится какая-то конкретная ссылка на них (попытался добавить оператор using для того же пространства имен, но это не решило проблему, и через диалог добавления ссылок проект не может ссылаться на себя (делает смысл).
Итак, есть ли идеи, почему публичные проверки, которые просто были перемещены в другой файл в том же пространстве имен, не видны моим моделям?
CommonValidations.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Text.RegularExpressions;
namespace ProjectName.Models
{
public class CommonValidations
{
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public sealed class EmailFormatValidAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value != null)
{
var expression = @"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$";
return Regex.IsMatch(value.ToString(), expression);
}
else
{
return false;
}
}
}
}
}
А вот код, с которого я хочу использовать проверку:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Growums.Models;
namespace ProjectName.Models
{
public class PrivacyModel
{
[Required(ErrorMessage="Required")]
[EmailFormatValid(ErrorMessage="Invalid Email")]
public string Email { get; set; }
}
}