Thanks Jason, but the entire point of what I'm trying to achieve
is *not* put the value into the code.
I wanted to use the container to populate the constructor with a
value *from the xml*, specifically so it doesn't have to be hard
coded while still hard coding the actual component registration.
I assumed the container would be capable of parsing and holding
the values from the properties node to use in fluent
registration, but so far it doesn't look like it does and I'll
need to parse the XML myself.
Cheers,
Symon.
Symon Rottem
http://blog.symbiotic-development.com
On Fri, Oct 15, 2010 at 8:30 PM, Jason Meckley
<[email protected] <mailto:[email protected]>> wrote:
you want to pass the actual value, not the property reference.
Parameter.ForKey("password").Eq("SomePassword")
here is an example taken from rhino.esb. here an array of
services are
registered instead of a single property value. the concept
should be
similar.
protected override void RegisterComponents()
{
Kernel.Register(
Component.For<IDeploymentAction>()
.ImplementedBy<CreateLogQueueAction>(),
Component.For<IDeploymentAction>()
.ImplementedBy<CreateQueuesAction>(),
Component.For<IServiceBus, IStartableServiceBus>()
.ImplementedBy<DefaultServiceBus>()
.LifeStyle.Is(LifestyleType.Singleton)
.DependsOn(new
{
messageOwners =
messageOwners.ToArray(),
})
.Parameters(Parameter.ForKey("modules").Eq(CreateModuleConfigurationNode())
)
);
}
private IConfiguration CreateModuleConfigurationNode()
{
var config = new MutableConfiguration("array");
foreach (Type type in messageModules)
{
config.CreateChild("item", "${" +
type.FullName + "}");
}
return config;
}
another idea: get access to the configuration store, get the
properties node and pull the password_property value from the
configuration store.
I like to use the dependson() method to register constants. i
find
it's cleaner. example:
class Foo
{
public int Number {get;set;}
Foo(string text)
{
}
}
Component.For<Foo>().DependsOn(new{text = "hi", Number = 1})
On Oct 15, 1:47 pm, Symon Rottem <[email protected]
<mailto:[email protected]>> wrote:
> Sure thing. It's a bit of a contrived example, but here goes:
>
> I want to have some properties registered in my <castle>
section in my
> web.config:
>
> <configSections>
> <section name="castle"
>
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
> Castle.Windsor"/>
> </configSections>
>
> <castle>
> <properties>
> <password_property>SomePassword<password_property>
> </properties>
> </castle>
>
> And then use them when registering a component fluently:
>
> windsorContainer = new WindsorContainer();
> windsorContainer.Install(Configuration.FromAppConfig());
>
> windsorContainer.Register(
> Component
> .For<SomeComponent>()
>
.Parameters(Parameter.ForKey("password").Eq("#{password_property}"))
> );
>
> Could be I'm doing it all wrong, but what I get passed into
the "password"
> parameter in the constructor of my SomeComponent instance
is the value
> "#{password_property}" rather than "SomePassword" as I
sexpected.
>
> What am I doing wrong?
>
> Cheers,
>
> Symon.
>
> Symon Rottemhttp://blog.symbiotic-development.com
<http://blog.symbiotic-development.com>
>
> On Fri, Oct 15, 2010 at 7:20 PM, Jason Meckley
<[email protected] <mailto:[email protected]>>wrote:
>
> > yes you can, there are multiple ways to configure
components. first
> > get the values from the xml file. that is external to
windsor. then
> > you can use the DependsOn fluent method or ServiceOverride or
> > Property.For().Eq() to configure the component. there may
be more
> > options as well but these are ones I'm aware of.
>
> > if you provide a code sample of what you want to do we
may be able to
> > help.
>
> > On Oct 15, 12:56 pm, João Bragança
<[email protected] <mailto:[email protected]>>
wrote:
> > > It's an ugly solution, but what about loading the XML
file in an
> > > xmldocument/xdocument and getting the properties that way?
>
> > > On Oct 15, 7:15 am, Symon Rottem <[email protected]
<mailto:[email protected]>> wrote:
>
> > > > Is it possible to use property reference notation
(#{property}) in the
> > > > fluent API?
>
> > > > I want to use properties that are registered in XML
to set values on
> > > > components registered via the API, but I don't seem
to be having any
> > luck.
>
> > > > Cheers,
>
> > > > Symon.
>
> > > > Symon Rottemhttp://blog.symbiotic-development.com
<http://blog.symbiotic-development.com>
>
> > --
> > 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]
<mailto:[email protected]>
> > .
> > To unsubscribe from this group, send email to
> > [email protected]
<mailto:castle-project-users%[email protected]><castle-project-users%[email protected]
<mailto: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]
<mailto:[email protected]>.
To unsubscribe from this group, send email to
[email protected]
<mailto: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]
<mailto:[email protected]>.
To unsubscribe from this group, send email to
[email protected]
<mailto:[email protected]>.
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.