لا تعمل Dataannotations و FleentValidation في مشروع MVC 2
-
27-09-2019 - |
سؤال
لقد قمت بتحرير السؤال الأصلي لأن الخطأ نفسه يحدث الفرق هو التنفيذ ، لقد أضفت الآن تسعة إلى هذا المزيج.
لقد أنشأت فصلًا عن قواعد التحقق من الصحة
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 استخدام عينة مساحة اسم مخصصة.
أم أفتقد شيئًا آخر؟
هتافات.
المحلول
المشكلة هي أن إطار الكيان يولد وكلاء ديناميكيين على فصولك ، ثم يحاول نظامك التحقق من صحة فئات الوكيل بدلاً من الفئات التي حددتها.
طريقة حل هذا هي نفس هذا إجابه.