Congratulation Valeriu. MattO, We don't have formal documentation for NHV btw I have posted a series exposing all features of NHV.
On Fri, Aug 20, 2010 at 12:20 PM, Valeriu Caraulean <[email protected]>wrote: > If you were using ValidationDef you can make a trick and use > ValidateInstance method to resolve validators from container. > You're asking about attributes, so: the solution that worked earlier for > us: > You can ry implement IConstraintValidatorFactory that will be resolving > components trough container. > Then you introduce a marker interface - IContainerAwareValidator to mark > validators you want to resolve trough container. > After that, register your factory: > new > FluentConfiguration().SetConstraintValidatorFactory<ContainerAwareConstraintValidatorFactory>() > > Factory example: > > public class ContainerAwareConstraintValidatorFactory : > IConstraintValidatorFactory > { > public virtual IValidator GetInstance(Type type) > { > if (typeof(IContainerAwareValidator).IsAssignableFrom(type)) > if (!IoC.Container.Kernel.HasComponent(type)) > throw new Exception(string.Format("Validator of type {0} not registered in > IOC container", type.Name)); > else > return IoC.Resolve(type) as IValidator; > > ThrowIfHasDependences(type); > > return (IValidator)Activator.CreateInstance(type); > } > > private static void ThrowIfHasDependences(Type type) > { > foreach (var constructorInfo in type.GetConstructors()) > { > if( constructorInfo.GetParameters().Length > 0) > throw new Exception(string.Format("Validator of type {0} has dependencies - > it should implement IContainerAwareValidator interface, to be resolved from > IOC container ", type.Name)); > > } > } > } > > > > On Fri, Aug 20, 2010 at 4:29 PM, MattO <[email protected]> wrote: > >> I have created a custom validator that I wish to put on one of my >> business objects attributes to do validation before an object is >> persisted to the database. >> >> In order for validation to be successful though I need to be able to >> pass in the variable to the custom validator, it is NOT a constant >> like all the other examples I've seen. How do you do this??? For >> instance where I have ExamType="blah" below, I need to be able to pass >> in the actual exam type property from the business object which is >> contained in the same class, but I don't see how you can do that. >> >> public class ActiveContentCodeAttribute : Attribute, IRuleArgs >> { >> private string _examType = string.Empty; >> public string ExamType >> { >> get { return _examType; } >> set { _examType = value; } >> } >> } >> >> public class ActiveContentCodeValidator : >> IInitializableValidator<ActiveContentCodeAttribute> >> { >> private string _examType = string.Empty; >> public bool IsValid(object value) >> { >> //TODO: Check database to see if the examtype is already >> active >> return true; >> } >> public void Initialize(ActiveContentCodeAttribute parameters) >> { >> _examType = parameters.ExamType; >> } >> } >> >> And on my business object class I have done this: >> >> [ActiveContentCode(ExamType="blah") >> public virtual bool Active >> { >> get { return _active; } >> set >> { >> OnActiveChanging(); >> _active = value; >> OnActiveChanged(); >> } >> } >> >> -- >> You received this message because you are subscribed to the Google Groups >> "nhusers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<nhusers%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/nhusers?hl=en. >> >> > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<nhusers%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > -- Fabio Maulo -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
