@AigizK

ASP.NET — как просматривать содержимое кеша

Решил узнать, какие вообще в проекте есть ключи для кеша и что в них содержится. И т.к. кеш может содержать что угодно(от простых типов до списка каких нибудь классов), то надо правильно отобразить все эти данные.
В данный момент реализовал все это через dynamic, но своя реализация не очень нравится, хотя то что мне нужно, она может отобразить. Столкнулся ли кто-нибудь с такой задачей и как его решал?
  • Вопрос задан
  • 2579 просмотров
Пригласить эксперта
Ответы на вопрос 2
Ernado
@Ernado
Архитектор программного обеспечения
Например так можно:

var keyList = new List();

var enumerator = cache.GetEnumerator();

while (enumerator.MoveNext())
{
keyList.Add(Convert.ToString(enumerator.Key));
}

foreach (var key in keyList)
{
cache[key] .... //there you can do something with cache value
}
Ответ написан
@AigizK Автор вопроса
Выкладываю свой вариант, вдруг кому пригодится. Реализован на MVC3 Razor. Здесь рассматриваются только те типы, которые мне понадобились, можно расширить добавив DataTable,DataRow и т.д.
@using System.Collections
@model dynamic
@helper ShowEnumerable(dynamic lst)
    {
        foreach (dynamic item in lst)
        {
    @SwitchViewData(item)
        }
}
@helper ShowProperties(dynamic item)
    {
        var properties = item.GetType().GetProperties();
 
    <table border="1" cellpadding="0" cellspacing="0">
        @foreach (dynamic property in properties)
        {
            //если это класс сгенерированный Linq2SQL то рассматриваем только колонки с атрибутом [ColumnAttribute]
            //у осатльных рассматриваем все
            var attributes = property.GetCustomAttributes(true);
            bool isColumnAttr = false;
            foreach (var attribute in attributes)
            {
                if (attribute.ToString().Contains("ColumnAttribute"))
                {
                    isColumnAttr = true;
                }
            }
            if (isColumnAttr || attributes.Length == 0)
            {
            <tr>
                <td>
                    @property.Name
                </td>
                <td>
                    @SwitchViewData(property.GetValue(item, null) ?? "")
                </td>
            </tr>
            }
        }
    </table>
    <br />
}
@helper SwitchViewData(dynamic data)
    {
        if (data is string)
        {
    @data<br />
        }
        else
        {
            if (data is IEnumerable)
            {
    @ShowEnumerable(data)
            }
            else if (data.GetType().GetProperties().Length > 0)
            {
    @ShowProperties(data)
            }
            else
            {
    @data<br />
            }
        }
}
@SwitchViewData(Model)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы