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

Amr*_*rhy 4 c# xml ioc-container unity-container

我在web.config中设置统一配置,我有一个类型,我想传递给它的连接字符串已经存在于同一个web.config文件中.

<connectionStrings>
    <add name="DatabaseConnectionString" connectionString="metadata=res://*/Database.csdl|res://*/Database.ssdl|....." providerName="System.Data.EntityClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

在统一部分有:

<type type="IDatabase" mapTo="Database" >
      <constructor>
          <param name="connectionString" >
             <value value="metadata=res://*/Database.csdl|res://*/Database.ssdl|...."/>
          </param>
      </constructor>
</type>
Run Code Online (Sandbox Code Playgroud)

但是就像我在同一个.config文件中写两次相同的conectionString一样,是否有另一种更好的方法将connectionString的名称传递给类型Database构造函数以避免web.config中的重复?

ono*_*nof 7

您可以按照Chris 回答上一个问题的建议编写自己的TypeConverter .

<type type="IDatabase" mapTo="Database" >
      <constructor>
          <param name="connectionString" >
             <value value="DatabaseConnectionString" typeConverter="ConnectionStringTypeConverter"/>
          </param>
      </constructor>
</type>
Run Code Online (Sandbox Code Playgroud)

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()];
      }
    }
Run Code Online (Sandbox Code Playgroud)