Well this has gone over my head... Do you need to be using Fluent nHibernate to use this? I'm using hbm XML files for everything...
On Aug 20, 10:36 am, Fabio Maulo <[email protected]> wrote: > 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- Hide quoted text - > > - Show quoted text - -- 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.
