I see selectors as a step in the pipeline where you can apply additional concerns, you don't care about what's already there, you just add behavior if necessary. That's why I don't think there should be only 1 selector and why a selector shouldn't care about the stuff that's already in model.Interceptors. That's why I'm saying we're probably looking at things under a different perspective.
About order of registration for selectors, I think it's a very bad way of doing things. To me the order of two calls to container.Register (or most of what else you could put into the container: facilities, interceptors,...) should mean as much as the order of two fields in a class. If you're relying on that you're looking for troubles. 2010/3/10 Krzysztof Koźmic <[email protected]> > On 3/10/2010 10:37 PM, Simone Busoli wrote: > > inline > > 2010/3/10 Krzysztof Koźmic <[email protected]> > >> On 3/10/2010 10:15 PM, Simone Busoli wrote: >> >> >> >> 2010/3/10 Krzysztof Koźmic <[email protected]> >> >>> On 3/10/2010 9:59 PM, Simone Busoli wrote: >>> >>> inline >>> >>> 2010/3/10 Krzysztof Koźmic <[email protected]> >>> >>>> you put interceptors in whatever order you please. >>>> >>> >>> how? >>> >>> You create the array yourself in the selector. You choose what to put >>> there, and in what order. it doesn't even have to have anything in common >>> with componentModel.Interceptors collection >>> >> >> Can you see that all interceptors in model.Interceptors are appended >> after those selected by all selectors? >> >> Yes, I can see that. I would execute that code only when no selector has >> opinion about component model in question. >> > > I'm not sure that would be a good choice, but we definitely need to > define what selectors are for. In my opinion they should have a chance to > modify the existing collection of interceptors. If they don't care about the > order then they will eventually append their stuff otherwise they will do > nothing. With the current code we're really looking for bugs with duplicate > interceptors appended at the end. > > Why wouldn't this be a good choice? > > Either selectors want to override the choice, or we go with default. Should > work IMO. > > > >> >> >> >>> >>> >>> >>>> between selectors order of selectors transfers to order of >>>> interceptors. Plus I think you should not have multiple selectors for >>>> one model so it's a non-issue anyway. >>>> >>> >>> why? I'm using multiple selectors to apply different and unrelated >>> concerns to models. Do you think I should centralize a bunch of unrelated >>> stuff into the same class? >>> >>> Give me a scenario. But despite of it, doesn't order of selectors give >>> you enough control? >>> >> >> A selector handling whether we need to add transaction interceptor and >> another handling exception-related stuff. >> Ideally I wouldn't like to depend on the order of selectors and put that >> logic in the selectors themselves, for instance, transaction interceptor >> should be last. (in this I would like to extend >> InterceptorReferenceCollection to support keeping an interceptor in a >> certain position even if other interceptors are added later) >> >> now we're talking :) >> I still think that you can achieve this with ordering of selectors without >> changing the interface. Plus you always can use IInterceptorSelector to >> select/order interceptors at a method level. >> > > Would you be confident in relying on the order in which you register your > selectors? I'd prefer to let the selector itself decide where to put its > interceptor/s. > > I think I would 99% of the time. And for the remaining 1% I'd use > IInterceptorSelector. > > >> >>> >>> >>>> in addition I'm against passing interceptors selected by one selector, >>>> to subsequent selectors. >>>> >>> >>> this is the current code. how do you apply order? how do you remove >>> interceptors? >>> >>> foreach(IModelInterceptorsSelector selector in selectors)// >>> selectors are asked in order you register them in >>> { >>> InterceptorReference[] interceptors = >>> selector.SelectInterceptors(model); >>> >>> + if (interceptors == null) >>> + { >>> + continue; >>> + } >>> + >>> + foreach (InterceptorReference interceptor in interceptors) >>> + yield return interceptor; // interceptors are returned in order >>> selector put them in the array >>> } >>> + >>> + foreach (InterceptorReference interceptor in model.Interceptors) >>> + yield return interceptor; >>> } >>> >>> Note that model.Interceptors are concatenated to anything returned by >> selectors, so you don't have control unless you modify the collection >> directly. >> >> >>> >>> >>>> >>>> 2010/3/10 Simone Busoli <[email protected]>: >>>> > Except that I don't agree with this principle, the return value >>>> doesn't let >>>> > you specify where exactly to put the interceptor. So the return value >>>> > provides a subset of the functionality provided by the input >>>> collection. >>>> > >>>> > 2010/3/10 Krzysztof Koźmic <[email protected]> >>>> >> >>>> >> void methods should not modify their arguments >>>> > >>>> > -- >>>> > 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]<castle-project-users%[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]<castle-project-users%[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. >>> >>> >>> -- >>> 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]<castle-project-users%[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. >> >> >> -- >> 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]<castle-project-users%[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. > > > -- > 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]<castle-project-users%[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.
