Thanks Mauricio - very detailed response.

I'm getting there...

I've found the method that registers the service overrides (
RegisterServiceOverrideFromConfigurationNode); from looking at the source I
guess that the id attribute values are strictly limited (as per the XML
sample in the docs)  to the values in the enum ServiceIdentification.

I assume you can't provide a value like "MyService" since the Enum.Parse
would throw an exception.  If you specify "Custom" then there could only one
custom service which defines a type and interface for that service but no
second custom service could be registered...so I still don't really
understand the reasoning behind the "Custom" id feature.

Apologies for the continued questions!

Cheers,

Symon.

Symon Rottem
http://blog.symbiotic-development.com


On Sat, Jul 31, 2010 at 7:57 PM, Mauricio Scheffer <
[email protected]> wrote:

> Here's what I make from the source code (inline):
>
> On Sat, Jul 31, 2010 at 6:59 AM, Symon Rottem <[email protected]> wrote:
> > Thanks Mauricio,
> > I think I understand the basic principles at work here, but I want to be
> > sure I'm clear before attempting to document it. Where I'm a bit stumped
> is
> > what is involved in overriding the services using the XML:
> >
> > Is the value id attribute restricted to the list provided?  If another
> value
> > is provided is it considered an error?
>
> Yes, it's an error. It will throw a MonoRailException.
>
> > If the id attribute value is "Custom" what does that mean?
>
> It will add the service as defined in the node. In this case, the
> service attribute id mandatory. If it matches one of MonoRail's
> service interfaces it will override it. Otherwise it will just add the
> service to the container as is.
>
>
> > I assume that the type specified in the type attribute would be the new
> type
> > to register under the existing id which would replace the default
> > implementation of the service - is that correct?
>
> yes.
>
> > I gather that the interface attribute is optional but if included the
> value
> > would need an interface that is implemented by the new type specified in
> the
> > type attribute - is that correct?
>
> Yes.
>
> > If the interface attribute is present is it restricted to the existing
> > interface that corresponds to the default service that's being
> overridden?
>
> If the id is "Custom" the interface and type can be anything (as long
> as the type implements the interface, of course).
> If the id is one of Monorail's services, the interface is inferred
> from the id. If you define both a non-custom id and an interface, and
> the interface doesn't match the expected monorail service interface,
> it will probably crash with an InvalidCastException or something.
>
> > One more thing; can services be overridden programatically?
>
> Yes. IMonoRailServices (= IMonoRailContainer) has setters for all
> services. IMonoRailContainer can be accessed at startup by making your
> HttpApplication implement IMonoRailContainerEvents. See
>
> http://blog.andreloker.de/post/2008/05/06/Access-to-MonoRail-service-instances.aspx
>
> Cheers,
> Mauricio
>
> > Cheers,
> > Symon.
> > Symon Rottem
> > http://blog.symbiotic-development.com
> >
> >
> > On Sat, Jul 31, 2010 at 12:45 AM, Mauricio Scheffer
> > <[email protected]> wrote:
> >>
> >> It allows the user to override the built-in MonoRail services
> >> (ControllerFactory, EmailSender, etc). A complete list of available
> >> services to override and service node structure is here:
> >>
> >>
> http://www.castleproject.org/monorail/documentation/trunk/manual/configurationref.html#ConfigExplained
> >> .
> >>
> >> Also see
> >>
> http://www.castleproject.org/monorail/documentation/trunk/advanced/services.html
> >>
> >> A list of default implementations for these services is in
> >> DefaultMonoRailContainer.InstallMissingServices():
> >>
> >>
> http://github.com/castleproject/Castle.MonoRail/blob/master/src/Castle.MonoRail.Framework/Container/DefaultMonoRailContainer.cs#L414
> >>
> >> This acts as a basic internal service locator. For example you could
> >> override the default cache provider with a memcached provider.
> >>
> >>
> >> On Fri, Jul 30, 2010 at 7:18 PM, Symon Rottem <[email protected]>
> wrote:
> >> > Hi Guys,
> >> > I'm working up expanded documentation for MonoRail and while working
> my
> >> > way
> >> > through the Configuration section I find that I'm stumped by the
> >> > services
> >> > node, what it's really for and how it works.  I've had a read through
> >> > the
> >> > services section of the existing documentation fear I am little wiser
> >> > for my
> >> > efforts.
> >> > Is there anyone out there who can explain what services are for, why
> one
> >> > would choose to put something into the <services> node in the MonoRail
> >> > configuration and what a <service> node is comprised of?  If someone
> can
> >> > explain it I can add it to the docs.
> >> > Cheers,
> >> > Symon.
> >> > Symon Rottem
> >> > http://blog.symbiotic-development.com
> >> >
> >> > --
> >> > 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]<castle-project-devel%[email protected]>
> .
> >> > For more options, visit this group at
> >> > http://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]<castle-project-devel%[email protected]>
> .
> >> For more options, visit this group at
> >> http://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]<castle-project-devel%[email protected]>
> .
> > For more options, visit this group at
> > http://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]<castle-project-devel%[email protected]>
> .
> For more options, visit this group at
> http://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.

Reply via email to