Как лучше всего использовать параметры экземпляра в атрибуте postshap?C#

Место общения программистов C#
Ответить
Anonymous
 Как лучше всего использовать параметры экземпляра в атрибуте postshap?

Сообщение Anonymous »

Я создаю атрибут PostSharp, который предназначен для создания (разного) кеша для каждого метода, который он аннотирует.
Поэтому мне нужен нестатический параметр экземпляра, который будет содержать значения:< /p>

Код: Выделить всё

private ConcurrentDictionary _cache = new ConcurrentDictionary();;
Однако меня это задело

Код: Выделить всё

Cannot serialize the aspects: Cannot find a serializer for type 'System.Collections.Concurrent.ConcurrentDictionary`
поэтому я аннотировал свой кеш с помощью [PNonSerialized]
но теперь мой _cache получал исключения нулевого указателя, потому что (я предполагаю) произошла некоторая десериализация, помешавшая моей инициализации _cache. Я не уверен, когда и почему PostSharp должен сериализовать/десериализовать. Мне удалось обойти проблему, выполнив

Код: Выделить всё

      private void InitializeCache()
{
if (_cache == null)
{
_cache = new ConcurrentDictionary();
}
}

// This method is called after deserialization to re-initialize non-serialized fields
public override void RuntimeInitialize(MethodBase method)
{
base.RuntimeInitialize(method);
InitializeCache();
}
но мне кажется, что я делаю что-то слишком сложное, поэтому я хотел бы спросить сообщество, есть ли лучшие способы достичь того, чего я по сути хочу, а именно создать экземпляр другого объекта для каждого атрибута PostSharp и сохраните его в памяти.

Подробнее здесь: https://stackoverflow.com/questions/789 ... -attribute
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»