使用属性中的配置设置

时间:2013-09-04 16:27:33

标签: c# .net

我有一段C#代码,如下所示:

[OracleCustomTypeMapping(Constants.DBSchema + ".TAB_VARCHAR2_250")]
public class StringTableFactory : TableFactoryTemplate<StringTable>
{
    public override System.Array CreateStatusArray(int length)
    {
        return new OracleUdtStatus[length];
    }
}

有没有办法更改属性声明,所以从web.config中读取Constants.DBSchema而不是将其硬编码为代码中的常量?如果我将ConfigurationManager.appSettings放在属性声明中,我得到“属性参数必须是常量表达式...”错误。

感谢。

1 个答案:

答案 0 :(得分:9)

不是将其作为构造函数参数的一部分传递,而是直接从Attribute的构造函数中的ConfigurationManager读取它。

public class OracleCustomTypeMappingAttribute : Attribute
{
    public OracleCustomTypeMappingAttribute(string typeName)
    {
        var schema = ConfigurationManager.AppSettings["Schema"];
        TypeMapping = schema + "." + typeName;
        // Or whatever property needs to be set
    }
}

然后你会这样做:

[OracleCustomTypeMapping("TAB_VARCHAR2_250")]
public class StringTableFactory : TableFactoryTemplate<StringTable>
{
    public override System.Array CreateStatusArray(int length)
    {
        return new OracleUdtStatus[length];
    }
}