Датананотации и свободность не работают в проекте MVC 2

StackOverflow https://stackoverflow.com/questions/3855054

Вопрос

Я отредактировал оригинальный вопрос, поскольку одинаковая ошибка возникает разница, являющаяся реализацией, теперь я добавил 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?

Или я упускаю что-то еще?

Ваше здоровье.

Это было полезно?

Решение

Проблема заключается в том, что структура сущности генерирует динамические прокси в ваших классах, а затем ваша система пытается проверить на прокси-классах вместо классов, которые вы определены.

Способ разрешения это так же, как это отвечать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top