DataAnnotations und FluentValidation arbeiten nicht in 2 MVC-Projekt
-
27-09-2019 - |
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.
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 .