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].
>> > 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.
>>
>
> --
> 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.
>

-- 
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