我有很多城堡 xml 配置,其中连接字符串等属性也保存在 .Net 配置部分下。
我希望能够使用容器读取属性,但看不到执行此操作的机制。
IE
<castle>
<configuration>
<properties>
<connectionString>Data Source=MyServer;Initial Catalog=YadaYada;User ID=me;Password=IAmGod</connectionString>
</properties>
<components>
...
显然,这些属性是存在的,因为它们存在组件依赖关系。我可以解析组件,但不能解析属性。
当然,我可以新建一个组件来读取注入(inject)它的属性城堡,或者我可以将所有属性包装在一个专门用于保存名称/值对的组件中。但我会认为有一个简单的 container.resolve("property.connectionstring") 表示法。
*编辑 Markdown 不是很好,上面是一个 xml 部分。
最佳答案
您可以通过几种不同的方式来执行此操作 - 对于强类型解决方案,显而易见的方法是实现自定义配置类,然后将类的属性与 Windsor 配置中的属性连接起来(只读属性与一堆构造函数参数可能是最好的,所以其他开发人员不认为他们可以更新它们) - 正如你所指出的,要保持两者同步需要做一些工作。也许写一个小工具来解析配置文件来为这个组件生成windsor config/class定义,所以你不需要维护它。
另一种选择是采用现有的配置解释器并公开在解析配置时收集的属性 - 需要做一些工作(但不会太多)来获得这些......我认为你可以通过以下方式做到这一点:
不幸的是,AFAIK 这些属性没有传递到配置存储,因为它们只在解释阶段使用——另外我不相信在解析的这个阶段调用类型转换器,所以值将是字符串,但至少 if/else 等条件语句将被正确评估,包括在内。
关于.net - 如何从 CaSTLe Windsor 配置中读取/解析属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/204737/