As I mentioned in my previous blog post adding a custom ActivityValidator class to an activity validates it at runtime as well as at design time.
So when is this runtime validation done and what happens when it fails?
The when part is when the WorkflowInstance object is first created using one of the overloads of the WorkflowRuntime CreateWorkflow function. This means that the activity cannot really validate all properties as they are when it starts executing. After all when it depends on some data provided by another activity it needs to wait until this other activity has executed. And that will not happen at the CreateWorkflow moment but after it is started. So only use it to validate properties that need to be set at compile time. So what is the point of checking at runtime? Well suppose your existing activity changed and has extra requirements. The existing workflow’s may not be recompiled so the first opportunity is to detect the error at runtime.
So what happens when the workflow is loaded and the runtime validation fails?
In that case an exception of type WorkflowValidationFailedException is raised. The Errors collection contains all validation errors in the form of ValidationError objects. Check the ErrorText property so see what is wrong.