views:

42

answers:

1

I am looking for examples of configuration based validation using Validation Application Block. I've found this

I want to ask if someone has an alternative solution to using EL VAB 5.0 to achieve configuration based validation. I've started with DataAnnotations but soon found out that some properties will need different types of validation depending on who is using the application.

Also if anyone has more examples for configuration with VAB and any advice as to what I might run into, please share.

A: 

There are several paths you can walk to achieve this. First of all you can (ab)use rulesets for this. You can create a 'base' ruleset with rules that hold for everybody and you can make a ruleset per role in the system and perhaps even a ruleset per user, but of course that would be cumbersome.

Another option would be to create an IConfigurationSource implementation that is able to return a ValidationSettings instance, based on the logged in user. Now there are several ways that you can build a ValidationSettings object. Here are a few examples:

  1. You can load multiple configuration files from disk using the FileConfigurationSource based on the role. Something like: return (new FileConfigurationSource('validation_' + role + '.config')).GetSection(sectionName);
  2. You can build up the ValidationSettings instances dynamically (and cache them). You can store this definition in the database and load them (this would be a lot of work) or define them in code (perhaps separated by assembly). Here is an example of a code based configuration.

Also to prevent having to duplicate parts of your configuration, you can do the following:

  1. Merge multiple configurations together. You can for instance merge the base line validation with the role specific validation. This saves you from having to manually validate according to the base line and do a second validation for the role specific validation. While this is not supported out of the box, I wrote about how to do this on my blog here.
  2. You can merge rules based on type inheritance. While VAB only supports validator inheritance for attribute based validation out of the box, I've wrote about this on my blog, here.

I hope this helps.

Steven
This is what I was looking for about VAB. I just have to decide now whether to actually use VAB or go with something else because that introduces another piece of code into the app, which complicates development to some degree.
mare
@Mare: As you might notice from my answers here on SO and my blog posts I really like VAB. However, it's flexibility comes at a price. It isn't an easy framework. I myself am still finding new (better) ways of doing things with VAB (one of the reasons I like it). If you choose to work with VAB and having any problems, I'll be happy to help. But at least, I wish you the best of luck in picking the right framework for you and your team.
Steven