Castle Windsor Fluent API:如何将组件参数值设置为配置的属性

发布于 2024-07-23 04:35:34 字数 716 浏览 11 评论 0原文

我刚刚开始对 Castle Windsor 进行 Fluent 注册,无法弄清楚如何在注册时引用我在 XML 配置文件的属性部分中定义的属性。 所以我有这段代码来注册一个组件。

RegisterComponent(componentId, Component.For<ConnectionConfig>()
            .ImplementedBy(typeof(ConnectionConfig))
            .Named(componentId)
            .LifeStyle.Singleton
            .Parameters(
                Parameter.ForKey("ConnectionId").Eq(connectionId),
                Parameter.ForKey("CommandTimeoutSeconds").Eq("#{ConnectionInfo.DefaultTimeout}")));

#{ConnectionInfo.DefaultTimeout} 是我在 XML 配置中定义的一个属性,它在 Fluent 注册之前加载到容器中,但这不起作用,在这段代码中,传递给 Eq() 的参数被视为文字(尽管这适用于其他组件,即 ${My.Component} 也可以)

有什么想法可以在通过新的 Fluent API 注册组件时引用配置文件中的属性吗?

谢谢

I am just getting started with the Fluent registration for Castle Windsor and cant figure out how I can reference properties I have defined in the properties section of my XML configuration file when registering. So I have this code to register a component.

RegisterComponent(componentId, Component.For<ConnectionConfig>()
            .ImplementedBy(typeof(ConnectionConfig))
            .Named(componentId)
            .LifeStyle.Singleton
            .Parameters(
                Parameter.ForKey("ConnectionId").Eq(connectionId),
                Parameter.ForKey("CommandTimeoutSeconds").Eq("#{ConnectionInfo.DefaultTimeout}")));

The #{ConnectionInfo.DefaultTimeout} is a property I have defined in the XML config which is loaded into the container prior to the Fluent registrations, but this does not work, in this code the parameter passed to Eq() is treated as a literal (although this works for other components i.e. ${My.Component} would work)

Any ideas how I can reference properties from my configuration file while registering components through the new Fluent API?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜空下最亮的亮点 2024-07-30 04:35:34

Windsor (3.x) 的最新版本对此有内置支持:

Component.For<Foo>().DependsOn(Dependency.OnAppConfigValue("someValue"))

More recent versions of Windsor (3.x) have a built-in support for this:

Component.For<Foo>().DependsOn(Dependency.OnAppConfigValue("someValue"))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文