我有一段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放在属性声明中,我得到“属性参数必须是常量表达式...”错误。
感谢。
答案 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];
}
}