我正在web.config中设置统一配置,我有一个类型,我想传递给它的连接字符串已经存在于同一个web.config文件中。
<connectionStrings>
<add name="DatabaseConnectionString" connectionString="metadata=res://*/Database.csdl|res://*/Database.ssdl|....." providerName="System.Data.EntityClient" />
</connectionStrings>
在统一部分有:
<type type="IDatabase" mapTo="Database" >
<constructor>
<param name="connectionString" >
<value value="metadata=res://*/Database.csdl|res://*/Database.ssdl|...."/>
</param>
</constructor>
</type>
但是就像我在同一个.config文件中编写相同的conectionString一样,是否有另一种更好的方法将connectionString的名称传递给类型Database构造函数以避免web.config中的重复?
答案 0 :(得分:7)
您可以按照Chris answering a previous question的建议编写自己的TypeConverter。
<type type="IDatabase" mapTo="Database" >
<constructor>
<param name="connectionString" >
<value value="DatabaseConnectionString" typeConverter="ConnectionStringTypeConverter"/>
</param>
</constructor>
</type>
http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx#config_value
修改强>
此转换器应该可以工作:
public class ConnectionStringTypeConverter : TypeConverter
{
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
return ConfigurationManager.ConnectionStrings[value.ToString()];
}
}
答案 1 :(得分:-1)
没有内置任何东西可以做到这一点。您可以编写一个可以沿着这些方向执行某些操作的架构扩展,但目前它并不是一个记录良好的过程。我会看看以后能否拿出一个例子。