首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.net核心MVC6数据注释关注点分离

ASP.net核心MVC6数据注释关注点分离
EN

Stack Overflow用户
提问于 2016-04-18 19:26:01
回答 2查看 2.6K关注 0票数 2

我希望将数据注释属性和IClientValidatable接口放在两个独立的程序集中,以便分离关注点。一种称为通用,另一种称为Comman.Web。

这些链接解释了它在MVC 5中的工作原理:

Keeping IClientValidatable outside the model layer

http://www.eidias.com/blog/2012/5/25/mvc-custom-validator-with-client-side-validation

不幸的是,在MVC6中没有

代码语言:javascript
复制
DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(MyValidationAttribute), 
    typeof(MyValidationAttributeAdapter)
);

它在ASP.net核心MVC6中是如何工作的?我使用RC1。

EN

回答 2

Stack Overflow用户

发布于 2016-04-19 00:56:44

Startup.csConfigureServices方法中:

代码语言:javascript
复制
services.AddMvc(options =>
{
    options.ModelValidatorProviders.Insert(0, new CustomModelValidatorProvider());
});

随着ASP.NET Core1.0API的更改,您必须调整您的代码。您可以在asp.net存储库中找到一个示例实现:DataAnnotationsModelValidatorProvider.cs

票数 2
EN

Stack Overflow用户

发布于 2016-10-01 02:28:49

在ASP.net Core1.0中,我可以通过替换IValidationAttributeAdapterProvider服务来做到这一点。

代码语言:javascript
复制
public class CustomValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
{
    public IValidationAttributeAdapterProvider internalImpl;

    public CustomValidationAttributeAdapterProvider()
    {
        internalImpl = new ValidationAttributeAdapterProvider();
    }

    public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
    {
        IAttributeAdapter adapter = internalImpl.GetAttributeAdapter(attribute, stringLocalizer);

        if (adapter == null)
        {
            var type = attribute.GetType();

            if (type == typeof(CustomValidatorAttribute))
            {
                adapter = new CustomNumberValidatorAdapter((CustomValidatorAttribute)attribute, stringLocalizer);
            }
        }

        return adapter;
    }
}

在启动ConfigureServices中

代码语言:javascript
复制
if (services.Any(f => f.ServiceType == typeof(IValidationAttributeAdapterProvider)))
{
    services.Remove(services.Single(f => f.ServiceType == typeof(IValidationAttributeAdapterProvider)));
}
services.AddScoped<IValidationAttributeAdapterProvider, CustomValidationAttributeAdapterProvider>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36692627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档