Я пишу библиотеку, которая используется совместно .net и silverlight.У меня есть несколько мест, где я делаю это, чтобы выполнить десериализацию Silverlight (которая не может получить доступ к закрытым членам):
[DataMember (IsRequired = true)]
public Object MyProperty { get;
#if SILVERLIGHT
internal
#else
private
#endif
set; }
Я знаю правила для этого, которые заключаются в том, что если сеттер является частным иSILVERLIGHT определяется, тогда сеттер должен быть внутренним.
Могу ли я использовать аспектно-ориентированную среду, такую как postsharp, чтобы помочь мне уменьшить этот код, чтобы мне не нужно ничего указывать, и он будет проверять свойство, еслиимеет атрибут DataMember, и установщик является личным, затем вместо этого установите установщик внутренним?
Или есть какой-то другой метод, который я мог бы использовать для этого?*
Кажется, есть некоторая путаница.Моя цель - избегать директив компилятора вообще , но по-прежнему иметь код, который генерируется с закрытым членом в .net и с элементом, который может быть установлен с помощью DataContractDeserializer
в Silverlight, которыйне может получить доступ к частным пользователям.Если возможно, я бы хотел автоматически изменить свойство в сборке silverlight, чтобы оно было внутренним, при этом в источнике не было ничего, кроме атрибута DataMember
.
В идеале я вижу решение, похожее на:
- Напишите аспект, который проверяет каждое свойство или поле.
- Если свойство / поле имеет атрибут
[DataMember]
, тогда - Если существует директива компилятора silverlight, тогда
- , если установщик является личным, сделать его внутренним (для свойств) или если он объявлен как частный, сделать его внутренним (для полей)
но я не уверен, какие биты этого можно было бы сделать с помощью такого инструмента, как Post Sharp.