Good article. However, I found an answer that is more along the lines of what I was really trying to do. I changed the type of the Argument being passed to UserDetailValidator from AddressValidator to IValidator<Address>. I still have to use AllInterfaces (at least in my testing so far) but it now works.
I guess that it has something to do with the fact I WAS asking for a concrete type, but all I registered was interfaces. Does that sound right? On Feb 11, 11:35 am, Patrick Steele <[email protected]> wrote: > See this article I wrote: > > http://visualstudiomagazine.com/articles/2011/12/01/windsor-beyond-de... > > It talks about service overrides. Basically, you can name your IFoo > implementations and then you can pick which IFoo implementation to use > (based on name) when registering a component that needs an IFoo. > > --- > Patrick Steelehttp://weblogs.asp.net/psteele > > > > > > > > On Sat, Feb 11, 2012 at 11:27 AM, Steven <[email protected]> wrote: > > Ok, now I get > > > No component for supporting the service IValidator`1[[UserDetail, > > Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] was > > found > > > If I use WithService.DefaultInterface or Base the code passes, but > > it's almost like the underlying base class is getting called instead > > of the appropriate subclass... > > > I'm not sure exactly what you mean by "configure some service > > overrides". > > > On Feb 11, 11:06 am, Patrick Steele <[email protected]> wrote: > >> I think the problem is that you're using > >> "WithService.AllInterfaces()". This will register AddressValidator > >> and UserDetailValidator as IValidator<> services. When you try and > >> resolve UserDetailValidator, the ctor needs an AddressValidator. > >> There isn't one registered -- there's two IValidator<T>'s registered, > >> but your ctor wants an AddressValidator. > > >> If you take out the WithService.AllInterfaces(), you should be okay. > >> But if you want other components to depend on an IValidator<T>, you'll > >> probably need to configure some service overrides so Windsor knows > >> which one of your multiple IValidator<T>'s to use. > > >> I think... :) > > >> --- > >> Patrick Steelehttp://weblogs.asp.net/psteele > > >> On Sat, Feb 11, 2012 at 9:27 AM, Steven <[email protected]> wrote: > >> > Yes, BaseValidator<T> does inherit from IValidator<T> > > >> > public abstract class BaseValidator<T> : AbstractValidator<T>, > >> > IValidator<T> > > >> > where AbstractValidator is a 3rd party lib base class (Jeremy Skinners > >> > FluentValidation). > > >> > On Feb 11, 9:21 am, Patrick Steele <[email protected]> wrote: > >> >> What does BaseValidator<T> look like? Does it implement IValidator<T>? > > >> >> --- > >> >> Patrick Steelehttp://weblogs.asp.net/psteele > > >> >> On Sat, Feb 11, 2012 at 7:31 AM, Steven <[email protected]> wrote: > >> >> > I have two classes that inherit from the same base class. > > >> >> > public class UserDetailValidator : BaseValidator<UserDetail>{ > >> >> > public UserDetailValidator(IRepository<Person, Guid> > >> >> > userRepository, > >> >> > AddressValidator addressValidator) > >> >> > { > >> >> > RuleFor(x => x.FirstName).Length(1, 10); > >> >> > } > >> >> > } > > >> >> > public class AddressValidator : BaseValidator<Address> > > >> >> > When I try and get the UserDetailValidator from WindsorServiceLocator > >> >> > I get the error > > >> >> > Missing dependency. > >> >> > Component UserDetailValidator has a dependency on AddressValidator, > >> >> > which could not be resolved. > >> >> > Make sure the dependency is correctly registered in the container as a > >> >> > service, or provided as inline argument. I'm using the following in > >> >> > my ValidationInstaller. > > >> >> > container.Register( > >> >> > AllTypes.FromAssemblyNamed("Validation") > >> >> > .IncludeNonPublicTypes() > >> >> > .BasedOn(typeof(IValidator<>)) > >> >> > .WithService.AllInterfaces() > >> >> > .LifestyleTransient() > > >> >> > The IRepository component is being injected with no problems. It's > >> >> > only the AddressValidator that does not come in. What am I not doing > >> >> > properly? > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups "Castle Project Development List" 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 > >> >> > athttp://groups.google.com/group/castle-project-devel?hl=en. > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups "Castle Project Development List" 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 > >> > athttp://groups.google.com/group/castle-project-devel?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "Castle Project Development List" 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 > > athttp://groups.google.com/group/castle-project-devel?hl=en. -- You received this message because you are subscribed to the Google Groups "Castle Project Development List" 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/castle-project-devel?hl=en.
