What about using http://en.wikipedia.org/wiki/Null_Object_pattern for a null validator? Then you don't need to customize the factory and you also don't have to test for null.
-r 2012/1/5 Kenneth Siewers Møller <[email protected]> > That's exactly why i wrote in the first place :) > > I'm not really sure how to approach this then. The point is, that > validation is optional. If I should adhere to the open/closed principle, I > would think I need only to add a new class to implement the new behavior, > correct? > > So basically, this is what happens: > > When a new message is created, it is passed to the message validation > service. The service has a dependency on a IMessageValidatorFactory (typed). > The validation service is calling the factory, passing the message to > validate, which in turn is providing a validator for the specific message. > If no validator is registered for the message (null), the service should > just validate to true. > > Am I completely off here and is there a better approach? > > Is there a way to return a default for a service, if none is registered > that matches the concrete one, like a DefaultMessageValidator? > > > Kenneth > > > > 2012/1/5 Krzysztof Koźmic <[email protected]> > >> That's not something I would normally recommend but if that's what you >> want it should be fine :-) >> >> K >> >> >> On 05/01/2012 9:51 PM, Kenneth Siewers Møller wrote: >> >> Hi, >> >> I'm currently working on an alternative implementation of the >> TypedFactoryComponentResolver. >> My problem is, that I'd like to use typed factories, but I need to return >> null, in case the component isn't registered. >> The concrete usecase is, that I'm looking for a validator for a specific >> type, and if no validator is registered, it should just return null from >> the factory. >> As the default implementation always throws an exception, if no component >> is registered, I've created my own version. >> >> /// <summary> >> /// Resolves a component. If the component isn't registered, the resolver >> returns null instead of an exception. >> /// </summary> >> internal class NullSafeTypedFactoryComponentResolver : >> TypedFactoryComponentResolver >> { >> public NullSafeTypedFactoryComponentResolver(string componentName, Type >> componentType, IDictionary additionalArguments, bool >> fallbackToResolveByTypeIfNameNotFound, Type actualSelectorType) >> : base(componentName, componentType, additionalArguments, >> fallbackToResolveByTypeIfNameNotFound, actualSelectorType) { } >> >> public override object Resolve(IKernelInternal kernel, IReleasePolicy >> scope) >> { >> // Check to see if the component is registered >> var hasComponent = componentName != null >> ? kernel.HasComponent(componentName) >> : kernel.HasComponent(componentType); >> >> return hasComponent ? base.Resolve(kernel, scope) : null; >> } >> } >> >> I'm then overriding the BuildFactoryComponent method from the >> DefaultTypedFactoryComponentSelector, to return my own implementation. >> >> Since I'm doing something non-standard, I'd just wanted to make sure, >> I'm not misusing (or misunderstanding) the concept of a typed factory. >> Basically I'm changing the semantics of the container, so I'm just a bit >> uncertain about which implications it may bring. >> >> >> Thanks, >> Kenneth >> -- >> You received this message because you are subscribed to the Google Groups >> "Castle Project Users" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/castle-project-users/-/GW3SaUL8FTEJ. >> 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-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 >> [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-users?hl=en. >> > > > > -- > Med venlig hilsen / Kind regards > Kenneth Siewers Møller > > -- > You received this message because you are subscribed to the Google Groups > "Castle Project Users" 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-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 [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-users?hl=en.
