سؤال

لقد قمت بتحرير السؤال الأصلي لأن الخطأ نفسه يحدث الفرق هو التنفيذ ، لقد أضفت الآن تسعة إلى هذا المزيج.

لقد أنشأت فصلًا عن قواعد التحقق من الصحة

public class AlbumValidator : AbstractValidator<Album> {
    public AlbumValidator() {
        RuleFor(a => a.Title).NotEmpty();
    }
}

لقد أنشأت alightormodule لـ 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()); }
    }

أقوم بتحميل موقع العينة ، انقر فوق رابط إنشاء ألبوم جديد ، ثم انقر فوق الزر "إنشاء" تاركًا العنوان فارغًا ، ثم استقبلت بالخطأ المحمي المحمي Void OnapPlicationStarted () {arearegistration.registerAllareas () ؛ RecordRoutes (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 Bootstrapper(),
            new FluentValidatorModule()); }
    }

أقوم بتحميل نموذج إنشاء وانقر فوق إنشاء ترك العنوان فارغًا منخفضًا واذا خطأ

This property cannot be set to a null value.

يشير الخط الذي يشير إليه في فئة Entity Framework Auto التي تم إنشاؤها

Namespace.Contains("DynamicProxies")

وكان الأمر عائدًا ، هل هذا لأنني أخبرت EF استخدام عينة مساحة اسم مخصصة.

أم أفتقد شيئًا آخر؟

هتافات.

هل كانت مفيدة؟

المحلول

المشكلة هي أن إطار الكيان يولد وكلاء ديناميكيين على فصولك ، ثم يحاول نظامك التحقق من صحة فئات الوكيل بدلاً من الفئات التي حددتها.

طريقة حل هذا هي نفس هذا إجابه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top