使用属性中的配置设置

use*_*169 6 .net c#

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

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

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

谢谢.

ros*_*dia 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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你会做:

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

  • 那时您还不能做很多事情。属性参数必须是编译时常量。 (2认同)