0

我有 ac# 应用程序(实际上它运行到 Windows 服务或类似于 Windows 应用程序)。

从 XML 文件中接收一次服务/应用程序运行的配置。

这个 XML 文件实际上只是我在 XML 中序列化/反序列化的数据。这是我生成它的其他应用程序之一。

在运行业务代码之前,我想确保配置文件是有效的。

我的意思是“这个字符串不能为空”,“这个时间跨度必须有一个大于 XYZ 的值”,......

因此,只能通过查看字段内容进行验证(无需访问其他内容)。

它让我想起了很多我在 asp.Net MVC 中使用的数据注释,我想如果简单的 c# 代码有类似的东西,而不必加载整个 asp.net MVC dll。

我的另一个选择是实现一种方法“Validate()”,如果一个字段不正确,它会抛出异常,但我会有很多if(String.IsNullOrEmpty()其他的虚拟验证。

我不想为自己实现一个使用反射的大型验证器,仅用于小型配置文件验证有点矫枉过正。

生成这些文件的应用程序也可能有兴趣使用这些相同的验证。

编辑:我必须使用 .Net 3.5

4

2 回答 2

1

这个问题看起来像下面的 SO 问题的重复。

在 MVC 之外使用 ASP.Net MVC 数据注释

编辑:正如您所说,ValidationContext 不可用,我建议您编写一些自定义代码,使用反射并为您评估属性上的所有属性。

有关如何完成的示例,请参阅此问题的答案。

ASP.Net MVC 2 控制器的 TryValidate 不验证模型中的 List<> 项

于 2012-11-23T14:42:06.287 回答
0

我使用了 IDataErrorInfo(在 wpf 应用程序中将使用相同的类)。并使用自定义方法在这里检查每个可能的属性。

这是方法:

 public Boolean IsModelValid()
    {
        Boolean isValid = true;
        PropertyInfo[] properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (PropertyInfo p in properties)
        {
            if (!p.CanWrite || !p.CanRead)
            {
                continue;
            }
            if (this[p.Name] != null)
            {
                isValid = false;
            }
        }
        return isValid;
    }
于 2012-11-28T11:43:24.853 回答