10

我有一段 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 放在属性声明中,则会收到“属性参数必须是常量表达式...”错误。

谢谢。

4

1 回答 1

10

与其将它作为构造函数参数的一部分传递,不如直接从ConfigurationManagerAttribute 的构造函数中读取它。

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];
    }
}
于 2013-09-04T16:34:15.357 回答