I just noticed something with the way the facility logger works. I am
saying this without trying to pick through the source code so maybe
someone can correct me if I'm wrong but it seems that the facility
analyzes components at registration and decides when and how to inject
loggers at this point.
The problem occurs if you are using a factory method without an
ImplementedBy clause (for example an abstract factory). In this case
the logging facility does not inject the logger because the specific
type is not known at registration time. What probably should be
occurring is that in this case the decision to inject a logger should
be happening when the component is created.
Another problem is that registration CAN use an ImplementedBy clause
with a factory method in which case the logger is injected fine.
However just because an ImplementedBy clause is used doesn't mean that
this is necessarily the type the factory returns. As a matter of fact
as pointed out in this thread here:
http://groups.google.com/group/castle-project-devel/browse_thread/thread/12a0320f36a2e9a7/d2bb40e8d292d90f#d2bb40e8d292d90f
an ImplementedBy clause when a factory method is used doesn't really
do anything at all.
So what happens if an ImplementedBy clause specifies a logging type
but the actual component returned from the factory method doesn't have
an ILogger property? ActivationError.
I don't know if I have the chops to try and fix this myself but if
anyone is interested I can try and provide more information.