Cache Wrapper с выражениями - PullRequest
1 голос
/ 06 апреля 2010

Я не знаю, возможно ли это.

Я хочу, чтобы класс инкапсулировал весь кэш моего сайта. Я думаю о лучшем способе сделать это, чтобы избежать конфликта с ключами.

Моя первая идея примерно такая:

    public static TResult Cachear<TResult>(this Cache cache, Expression<Func<TResult>> funcao)
    {
        string chave = funcao.ToString();

        if (!(cache[chave] is TResult))
        {
            cache[chave] = funcao.Compile()();
        }

        return (TResult)cache[chave];
    }

Это лучший способ? Ty

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

Expression.ToString() довольно дорого.

Другая проблема состоит в том, что Expression всегда являются недавно созданными объектами, поэтому они никогда не будут иметь одинаковую ссылку, поэтому использование этого в качестве ключа проблематично.

Еще одна проблема (которая не затрагивает вас (пока)) - это рассмотрение всех возможных комбинаций параметров.

Единственное, что я могу предложить - это забыть о Expression и просто использовать Func<R> напрямую.

0 голосов
/ 13 ноября 2010

Я сделал класс, который делает это. В кодовом комплексе: http://fujiy.codeplex.com/SourceControl/changeset/view/5d9d4a292597#Misc/Fujiy.Util/Caching/CacheHelper.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...