Датананотации и свободность не работают в проекте MVC 2
-
27-09-2019 - |
Вопрос
Я отредактировал оригинальный вопрос, поскольку одинаковая ошибка возникает разница, являющаяся реализацией, теперь я добавил Ninject в смесь.
Я создал класс для правил валидации
public class AlbumValidator : AbstractValidator<Album> {
public AlbumValidator() {
RuleFor(a => a.Title).NotEmpty();
}
}
Я создал Validatormodule для Ninject
internal class FluentValidatorModule : NinjectModule {
public override void Load() {
AssemblyScanner.FindValidatorsInAssemblyContaining<AlbumValidator>()
.ForEach(result => Bind(result.InterfaceType).To(result.ValidatorType).InSingletonScope());
}
}
Вот моя валидората
public class NinjectValidatorFactory : ValidatorFactoryBase {
public override IValidator CreateInstance(Type validatorType) {
if (validatorType.GetGenericArguments()[0].Namespace.Contains("DynamicProxies")) {
validatorType = Type.GetType(string.Format("{0}.{1}[[{2}]], {3}",
validatorType.Namespace,
validatorType.Name,
validatorType.GetGenericArguments()[0].BaseType.AssemblyQualifiedName,
validatorType.Assembly.FullName));
}
return Container.Get(validatorType) as IValidator;
}
IKernel Container { get; set; }
public NinjectValidatorFactory(IKernel container) {
Container = container;
}
}
и соответствующие части от моего глобального
protected override void OnApplicationStarted() {
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
var factory = new NinjectValidatorFactory(Container);
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(factory));
DataAnnotationsModelValidatorProvider
.AddImplicitRequiredAttributeForValueTypes = false;
}
protected override IKernel CreateKernel() {
return Container;
}
IKernel Container {
get { return new StandardKernel(new FluentValidatorModule()); }
}
Я загрузку сайта образца Нажмите на ссылку «Создать новый альбом», а затем щелкните кнопку «Создать кнопку, оставляя заголовок Пусто», я потом встретил с ошибками, защищенного от переопределения. Регистрация. Секрегин (ротается на маршрут. Routes);
var factory = new NinjectValidatorFactory(Container);
ModelValidatorProviders.Providers.Add(
new FluentValidationModelValidatorProvider(factory));
DataAnnotationsModelValidatorProvider
.AddImplicitRequiredAttributeForValueTypes = false;
}
protected override IKernel CreateKernel() {
return Container;
}
IKernel Container {
get { return new StandardKernel(
new Bootstrapper(),
new FluentValidatorModule()); }
}
Я загружаю форму создания и нажмите «Создать, оставляя заголовок пустой низкий», и вот ошибка
This property cannot be set to a null value.
Линия, которую она ссылается, находится в классе Framework Entity, я прослеживал
Namespace.Contains("DynamicProxies")
И это вернуло ложно, это потому, что я сказал EF использовать пользовательское пространство имен Samplemusicstore.Web?
Или я упускаю что-то еще?
Ваше здоровье.
Решение
Проблема заключается в том, что структура сущности генерирует динамические прокси в ваших классах, а затем ваша система пытается проверить на прокси-классах вместо классов, которые вы определены.
Способ разрешения это так же, как это отвечать.