c# - 简化类结构

标签 c# class caching

我已经建立了一个配置系统,它将从 MySQL 数据库中获取配置。我已经让它工作了,但现在我意识到要从缓存中获取值,我必须使用这个又长又乱的代码。

CacheLayer.Instance.Caches["app_config"].Current.EmailALertInterval

我想删除 Current,但我还没有弄清楚是否可以让该类直接执行此操作。目前的实现如下所示。

public T Current
{
    get
    {
        if (_current == null)
        {
            ReloadConfiguration();
        }

        return _current;
    }
}

但我想简单地说:

CacheLayer.Instance.Caches["app_config"].EmailALertInterval

我正在寻找类似的东西,但这仅适用于索引器。

public T this[T key]

编辑:为了添加更多上下文,我将添加更多代码。

这是缓存层。它本质上允许我存储多个配置。我可能有一个通用应用程序配置,但我也可以获取一组使用的电子邮件。

public Dictionary<String,IGenericCache<dynamic>> Caches
{
    get
    {
        return _caches;
    }
}

public void AddCache(String config)
{
    _caches.Add(config,new GenericCache<dynamic>(config));
}

在我的 GenericCache 中,我使用存储在 MySQL 数据库中的 JSON 字符串加载配置。

_current = JsonConvert.DeserializeObject<T>(db.dbFetchConfig(config));

GenericConfigT 而不是 dynamic 的原因是因为我希望能够在 之外进行自定义实现>CacheLayer,不一定使用动态

关于我希望如何使用它的另一个例子。

List<String> EmailList = CacheLayer.Instance.Caches["EmailList"].Current;

这实际上会从 MySQL 中获取一个包含电子邮件列表的 JSON 数组。

有什么想法吗?

最佳答案

添加新属性

public int EmailALertInterval
{
    get { return Current.EmailALertInterval; }
}

关于c# - 简化类结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969602/

相关文章:

C++ - 成员初始化和递增的顺序

asp.net - IIS7 缓存控制

c# - 插入期间未处理 MySqlException

c# - 使用C#编辑Xml文件

c++ - Q : C++ - Reversing a string (sentence and word) using a class

java - Employee 和 EmployeeDemo,如何获得两个独立员工的以下输出?

vue.js - nuxt.js - 如何在服务器端为所有客户端缓存 axios 调用

c# - 将存储库模式、缓存和 Web 服务链接在一起

c# - 当异常处理所有其他代码路径时,方法末尾的 'return true' 是不好的做法吗?

c# - 在 wcf 服务中引用 c++ 库