我正在尝试使用两个属性占位符配置器,其中一个用于检索 base64 解码的值。我遇到的问题是其中只有一个正在将属性加载到名称/值集合中。哪一个取决于我在 XML 中放置它们的顺序(并且在切换它们时我确实将第一个设置为 ignoreUnresolvable )。
这是配置的样子:
<object id="propertyConfigurer" type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file://~Database.config</value>
</list>
</property>
<property name="configSections">
<list>
<value>database</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</object>
<object id="encodedPropertyConfigurer" type="MyProject.Config.EncodedPropertyConfigurer">
<property name="locations">
<list>
<value>file://~Database_auth.config</value>
</list>
</property>
<property name="configSections">
<list>
<value>database_auth</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="false" />
</object>
我扩展了 PropertyPlaceholderConfigurer,像这样覆盖虚拟方法:
public class EncodedPropertyConfigurer : PropertyPlaceholderConfigurer
{
protected override string ResolvePlaceholder(string placeholder, System.Collections.Specialized.NameValueCollection props)
{
return System.Text.Encoding.ASCII.GetString(Convert.FromBase64String(base.ResolvePlaceholder(placeholder, props)));
}
}
同样,根据我将它们放在 Web.config 中的顺序,只有一个文件被加载到 Name/Value 集合中。粘贴时,它将使用encodedPropertyConfigurer(例如,我会在集合中看到“用户名”和“密码”,但看不到连接字符串。如果我颠倒顺序,我会看到“connectionString”,但看不到用户名或密码。)我做错了什么?文档说支持多个 PropertyPlaceholderConfigurer,只是要小心 ignoreUnresolvable 设置。请注意,我使用两个实例作为 Spring PropertyPlaceholderConfigurer(而不是我的扩展类)进行了测试,并且发生了相同的行为 - 只有一个被加载到列表中。