在Unity配置中,如何将connectionString传递给构造函数?

时间:2010-11-23 02:33:26

标签: c# xml unity-container ioc-container

我正在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中的重复?

2 个答案:

答案 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)

没有内置任何东西可以做到这一点。您可以编写一个可以沿着这些方向执行某些操作的架构扩展,但目前它并不是一个记录良好的过程。我会看看以后能否拿出一个例子。