Frage

Ich habe die ursprüngliche Frage bearbeitet, da der gleiche Fehler, den Unterschied auftritt die Umsetzung zu sein, ich habe jetzt Ninject die Mischung hinzugefügt.

Ich habe eine Klasse für die Validierungsregeln erstellt

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

Ich habe eine ValidatorModule für Ninject erstellt

internal class FluentValidatorModule : NinjectModule {
    public override void Load() {
        AssemblyScanner.FindValidatorsInAssemblyContaining<AlbumValidator>()
            .ForEach(result => Bind(result.InterfaceType).To(result.ValidatorType).InSingletonScope());
    }
}

Hier ist meine ValidatorFactory

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;
    }
}

und die relevanten Teile von meinem Globale

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()); }
    }

lade ich den Probenort, klicken Sie auf das neue Album Link erstellen und klicken Sie dann auf die Schaltfläche Erstellen Verlassen der Titel leer Ich bin dann mit dem Fehler protected override void OnApplicationStarted () begrüßte {             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 Bootstrapper(),
            new FluentValidatorModule()); }
    }

ich das schaffen Form laden und erstellen Sie auf den Titel leer niedrig zu verlassen und siehe einem Fehler

This property cannot be set to a null value.

Die Linie es verweist innerhalb des Autos Entity Framework generierte Klasse, ich verfolgen die

Namespace.Contains("DynamicProxies")

und es wurde false zurückgibt, ist dies, weil ich EF gesagt einen benutzerdefinierten Namespace SampleMusicStore.Web zu benutzen?

Oder bin ich etwas fehlt noch?

Prost.

War es hilfreich?

Lösung

Das Problem ist, dass Entity Framework generiert dynamische Proxies auf Ihren Klassen, und dann das System versucht zu validieren gegen die Proxy-Klassen anstelle der Klassen, die Sie definiert.

Die Art und Weise, dies zu lösen, ist das gleiche wie diese Antwort .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top