从web.config中调用常量名称

时间:2014-12-16 14:22:37

标签: c# asp.net namespaces constants

在webserivce编码中,我想从web.config中调用一个常量名称。 我有这段代码:

namespace Service.AppCode.Common.Service
{
    [ServiceContract(Namespace = Constants.Namespace)]
    public interface IService1
    {
        [OperationContract]
        void DoWork();
    }
}

和这段代码:

namespace Service.AppCode.Common
{
    public class Constants
    {
        public const string Namespace = ConfigurationManager.AppSettings["DefaulIP"];
    }
}

它会说:

  

分配给的表达式   ' Service.AppCode.Common.Constants.Namespace'必须是不变的

是否可以从web.config中调用它?

1 个答案:

答案 0 :(得分:1)

常量在编译时定义并直接嵌入到生成的代码中,它们在应用程序执行时不会初始化。 (并且不能改变,不像配置值可以改变。)

然而,看着这个......

public class Constants
{
    public readonly static string Namespace = 
        ConfigurationManager.AppSettings["DefaulIP"];
}

看起来你只想要一个静态的不可变值。这很容易......

public class Constants
{
    public static string Namespace
    {
        get { return ConfigurationManager.AppSettings["DefaulIP"]; }
    }
}

只要调用它,它就会从配置中动态读取值。因为它只是一个吸气剂,所以它是只读的。如果您希望它只从配置中读取一次,只需缓存值:

public class Constants
{
    private static string _namespace = null;
    public static string Namespace
    {
        get
        {
            if (_namespace == null)
                _namespace = ConfigurationManager.AppSettings["DefaulIP"];
            return _namespace;
        }
    }
}