优化配置基类Config的当前提供者Provider
大石头 authored at 2021-12-03 23:38:12
3.32 KiB
X
using System;

namespace NewLife.Configuration
{
    /// <summary>配置特性</summary>
    /// <remarks>
    /// 声明配置模型使用哪一种配置提供者,以及所需要的文件名和分类名。
    /// 如未指定提供者,则使用全局默认,此时将根据全局代码配置或环境变量配置使用不同提供者,实现配置信息整体转移。
    /// </remarks>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class ConfigAttribute : Attribute
    {
        /// <summary>提供者。内置ini/xml/json/http,一般不指定,使用全局默认</summary>
        public String Provider { get; set; }

        /// <summary>配置名。可以是文件名或分类名</summary>
        public String Name { get; set; }

        /// <summary>指定配置名</summary>
        /// <param name="name">配置名。可以是文件名或分类名</param>
        /// <param name="provider">提供者。内置ini/xml/json/http,一般不指定,使用全局默认</param>
        public ConfigAttribute(String name, String provider = null)
        {
            Provider = provider;
            Name = name;
        }
    }

    /// <summary>http配置特性</summary>
    /// <remarks>
    /// 声明配置模型使用哪一种配置提供者,以及所需要的文件名和分类名。
    /// 如未指定提供者,则使用全局默认,此时将根据全局代码配置或环境变量配置使用不同提供者,实现配置信息整体转移。
    /// </remarks>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class HttpConfigAttribute : ConfigAttribute
    {
        /// <summary>应用标识</summary>
        public String Server { get; set; }
        /// <summary>服务操作</summary>
        public String Action { get; set; }
        /// <summary>应用标识</summary>
        public String AppId { get; set; }

        /// <summary>应用密钥</summary>
        public String Secret { get; set; }

        /// <summary>作用域。获取指定作用域下的配置值,生产、开发、测试 等</summary>
        public String Scope { get; set; }

        /// <summary>本地缓存配置数据。即使网络断开,仍然能够加载使用本地数据,默认Encrypted</summary>
        public ConfigCacheLevel CacheLevel { get; set; }

        /// <summary>指定配置名</summary>
        /// <param name="server">服务器地址</param>
        /// <param name="action">服务操作</param>
        /// <param name="name">配置名。可以是文件名或分类名</param>
        /// <param name="appId">应用标识</param>
        /// <param name="secret">应用密钥</param>
        /// <param name="scope">作用域。获取指定作用域下的配置值,生产、开发、测试 等</param>
        /// <param name="cacheLevel">本地缓存配置数据。即使网络断开,仍然能够加载使用本地数据,默认Encrypted</param>
        public HttpConfigAttribute(String name, String server, String action, String appId, String secret = null, String scope = null, ConfigCacheLevel cacheLevel = ConfigCacheLevel.Encrypted) : base(name, "http")
        {
            Server = server;
            Action = action;
            AppId = appId;
            Secret = secret;
            Scope = scope;
            CacheLevel = cacheLevel;
        }
    }
}