Как лучше всего использовать параметры экземпляра в атрибуте 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

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