验证 VAB 配置文件中的程序集和命名空间
我们正在使用 4.1 版的验证应用程序块。我对它比较陌生,所以我想知道它是否能够抽象出配置的命名空间和程序集,或者以其他方式提供对其存在的正确验证?
我们最近遇到一个问题,有人移动了一个类,但没有使用新的命名空间更新验证配置文件。因此,验证不再应用于该对象。应用程序块似乎只是忽略了这些差异。不幸的是,在正常的质量检查周期中没有发现这一点。是否有任何内置方法可以保护我们自己免受未来此类变化的影响?在此期间我所做的是加载配置 xml,提取所有程序集和定义的命名空间并验证它们是否都存在。
We are using version 4.1 of the validation application block. I am relatively new to it so I was wondering if it had the ability to either abstract out the configured namespaces and assemblies or otherwise provide proper validation of their existence?
We had an issue recently where someone moved a class and didn't update the validation configuration file with the new namespace. As a result the validations were no longer being applied to the object. The application block seems to just ignore the discrepancies. Unfortunately this was not caught during the normal QA cycle. Is there any built in way to protect ourselves from this type of change in the future? What I did in the interim is load up the config xml, extract out all the assemblies and defined namespaces and validate that they all exist.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编写一组单元测试来查看对象是否得到正确验证。
另一种选择是以流畅的方式动态构建 vab 配置。这将为您提供编译时支持和重构安全性。
只有一个问题:vab 不支持此开箱即用。你必须自己写这个。创建具有此类功能的 VAB contrib 项目多年来一直在我的待办事项清单上,但我从未有时间这样做。但这并不难。这是我几年前编写的代码(但从未有时间完成它):
使用此代码,您可以流畅地定义您的配置,如下所示:
ValidationConfigurationBuilder
是一个IConfigurationSource,您可以将其提供给 ValidationFactory.CreateValidator
实例。这是一个例子:Write a set of unit tests to see if objects get validated correctly.
Another option is to build up the vab configuration dynamically in a fluent way. This will give you compile time support and refactoring safety.
There is only one problem with this: vab has no support for this out of the box. You will have to write this yourself. Creating a VAB contrib project with such feature is on my todo list for years already, but I never had the time to do this. It isn't that hard though. Here is the code I wrote a few years back (but never got the time to finish it):
Using this code you can define your configuration fluently as follows:
The
ValidationConfigurationBuilder
is aIConfigurationSource
and you can supply it to theValidationFactory.CreateValidator
instance. Here's an example:我想到的一种可能的解决方案是使用 AOP 编程概念。
简而言之,例如在您的情况下,您使用某些属性标记“脆弱”代码,并在编译时检查
类型
、成员函数
,属性
...处于您想要的状态。就像引用:
CSharpCornerArticle-2009(旧但仍然很好)
PostSharp(可能是现在市场上最好的工具对于 AOP)
Rolsyn(编译器即 MS 提供的服务。您可以编写自己的小型
C#
或VB.NET
代码解析器,并将其注入您的 CI 环境中,希望这会有所帮助。
One of possible solutions that comes to me is using of
AOP
programming concepts.In short, for example in your case, you mark the "fragile" code with some attibute and at compile time check if the
type
,member function
,property
... is in a state you intendt it ti be in.Like a references:
CSharpCornerArticle-2009 (old but still good one)
PostSharp (may be the best tool on the market now for AOP)
Rolsyn (compiler as a Service provided by MS. You can write your own small parser of
C#
orVB.NET
code and inject it inside you CI environment.Hope this helps.
我遇到了类似的问题,因此我为企业库验证编写了一个包装器,它在运行时查找部署中的所有验证器并为我注册它们。然后我愉快地删除了我的 XML 配置。
我在此处写了一篇关于它的博客。
I had a similar issue, so I wrote a wrapper for the Enterprise Library validation which looks up all the validators in the deployment at runtime and registers them for me. I then happily deleted my XML configuration.
I've written a blog about it here.