Ah I see. Is there an online example of something so that i could use ut as a starting point? thx
On Feb 11, 11:26 am, Alex Henderson <bitterco...@gmail.com> wrote: > Hi Yannis, > > I think you misunderstood me - what I suggested was using that same > _technique_ but applying it to the validator mechanics instead, by creating > a validator registry that can handle the injection of property dependencies. > > It looks like you're using ASP.Net MVC with a ValidateModelAttribute, that > I'm guessing is injected with an instance of the IValidatorRunner - it's > that runner that you will need to set up with your own version of the > validator registry. > > Cheers, > > - Alex > > On Thu, Feb 11, 2010 at 7:35 PM, Yannis <yannis.psar...@gmail.com> wrote: > > I am not - the attribute needs to serve only as a wrapper around the > > actual validator. Something that purely calls the validator. the > > reason i have passed the IUserService in there is because i need to > > instantiate the validator (e.g. new > > MyCustomValidator(userInterfaceObject). > > > Also, I am already doing what Alex above suggested and works fine but > > doesnt work for validator attributes. The reason is that this code > > will inject dependencies for actionfilters so: > > > [ValidateModel(typeof(SomeModel))] > > public ActionResult SomeAction(SomeModel model) { ... } > > > if i was to inject properties in ValidateModel that would be fine and > > I can do this currently. but instead i want to inject properties in > > attributes declared on SomeModel and used by ValidateModel attribute. > > Maybe this is very confusing. I could post some code here if this > > would make things easier to understand. > > > On Feb 9, 9:44 pm, "G. Richard Bellamy" <rbell...@pteradigm.com> > > wrote: > > > Of course others have written custom attributes. > > > > The problem is that you're trying to make attributes do something they're > > > just not really designed for. > > > > Instead of approaching the problem from the attribute side, try coming at > > it > > > from the Validator side. > > > > Take a look at the ValidatorContainerInterfaceValidationContributor (and > > > specifically IValidatorContainerInterface), which will allow you to > > supply a > > > custom ValidationPerformer, ValidationRegistry and ValidationRunner. With > > > this combination, you can ensure the Validator is made aware of the need > > for > > > IUserService validation process requirements. > > > > Or maybe I'm just out of my mind, and someone else should chime in... > > > > -rb > > > > -----Original Message----- > > > From: castle-project-users@googlegroups.com > > > > [mailto:castle-project-us...@googlegroups.com] On Behalf Of Yannis > > > Sent: Tuesday, February 09, 2010 11:00 AM > > > To: Castle Project Users > > > Subject: Re: Inject dependencies in custom validator attribute > > > > no i dont want to register it with the container - that would also not > > > work. > > > I could use the container or the common service location mentioned > > > below but i dont want to couple the attribute with the process of > > > looking up the service from some container. > > > > I want it to be a simple constructor > > > SomeValidationAttribute(IUserService s) > > > > if the same attribute is used elsewhere (where a/the container is not > > > avaialable) then this approach would still work. > > > > Can someone post how they have done this in the past? i cant imagine i > > > m the only one writing custom attributes with the castle framework. > > > > thx > > > > On Feb 9, 6:30 pm, "G. Richard Bellamy" <rbell...@pteradigm.com> > > > wrote: > > > > #1: you return true to SupportsBrowserValidation, which can't be right, > > > > since you're calling a service which can really only be Server-Side, > > since > > > > it's accessing the persistence layer of your Model. > > > > > #2: the ValidationAttribute(s) have no knowledge of the container > > unless > > > you > > > > supply that knowledge. If you want access to the implementation of > > > > IUserService, I don't see how you're going to get it unless you use the > > > > container (or, *gasp* create an instance yourself). In my opinion, it > > > > doesn't make sense to register a ValidationAttribute with the > > container, > > > > which is what it sounds like you're asking about... but somebody else > > may > > > > have a different view (I'd love to hear it). To me, although this is a > > > > validation process, the responsibility lies in the IUserService. > > > > > -rb > > > > > -----Original Message----- > > > > From: castle-project-users@googlegroups.com > > > > > [mailto:castle-project-us...@googlegroups.com] On Behalf Of Yannis > > > > Sent: Monday, February 08, 2010 10:28 PM > > > > To: Castle Project Users > > > > Subject: Inject dependencies in custom validator attribute > > > > > Hi all, > > > > > I have spent over 2 days on this and havent found a good solution so > > > > far so I think its time to ask the experts :) > > > > > I have a user registration form and I would like to make sure that the > > > > email/username entered doesnt already exist in the database. This is > > > > clearly a validation issue so i thought of creating a validation > > > > attribute to perform this task. > > > > > currently i have the following code and i am trying to inject > > > > IUserService. I know i could do hacks like IOC.Resolve<IUserService>() > > > > in the getter but i would like to keep my code free from coupling it > > > > with the container. thx a lot > > > > > public class ValidateUniqueEmailAttribute : > > > > AbstractValidationAttribute > > > > { > > > > private readonly String _Message; > > > > > public ValidateUniqueEmailAttribute(String message) > > > > { > > > > _Message = message; > > > > } > > > > > public IUserService UserService { get; set; } > > > > > public override IValidator Build() > > > > { > > > > var validator = new UniqueEmailValidator(UserService) > > > > { ErrorMessage = _Message }; > > > > ConfigureValidatorMessage(validator); > > > > return validator; > > > > } > > > > } > > > > > and > > > > > public class UniqueEmailValidator : AbstractValidator > > > > { > > > > private IUserService _UserService; > > > > > public UniqueEmailValidator(IUserService userService) > > > > { > > > > _UserService = userService; > > > > } > > > > > public override bool IsValid(object instance, object > > > > fieldValue) > > > > { > > > > if (fieldValue == null) return true; > > > > > return _UserService.EmailExists(fieldValue.ToString()); > > > > } > > > > > public override bool SupportsBrowserValidation > > > > { > > > > get { return true; } > > > > } > > > > } > > > > > -- > > > > You received this message because you are subscribed to the Google > > Groups > > > > "Castle Project Users" group. > > > > To post to this group, send email to > > > castle-project-us...@googlegroups.com. > > > > To unsubscribe from this group, send email to > > > > castle-project-users+unsubscr...@googlegroups.com<castle-project-users%2bunsubscr...@googlegroups.com> > > . > > > > For more options, visit this group > > > athttp://groups.google.com/group/castle-project-users?hl=en. > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "Castle Project Users" group. > > > To post to this group, send email to > > castle-project-us...@googlegroups.com. > > > To unsubscribe from this group, send email to > > > castle-project-users+unsubscr...@googlegroups.com<castle-project-users%2bunsubscr...@googlegroups.com> > > . > > > For more options, visit this group athttp:// > > groups.google.com/group/castle-project-users?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Castle Project Users" group. > > To post to this group, send email to castle-project-users@googlegroups.com > > . > > To unsubscribe from this group, send email to > > castle-project-users+unsubscr...@googlegroups.com<castle-project-users%2bunsubscr...@googlegroups.com> > > . > > For more options, visit this group at > >http://groups.google.com/group/castle-project-users?hl=en. -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-us...@googlegroups.com. To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.