У меня есть класс Thing
, который десериализован из файла JSON с использованием DataContractJsonSerializer
:
[DataContract]
class Thing
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
// and so on...
}
Чтобы это работало, все свойства должны иметь public
или, по крайней мере, internal
setters.
Два других модуля (сборки) должны иметь доступ к этому классу:
ThingView
должен иметь доступ только для чтения к большинству атрибутов. ThingEditor
нужен полный доступ ко всем атрибутам.
Я мог бы установить сеттеры internal
, но тогда ThingEditor
не получил бы полный доступ.
Чтобы ограничить доступ для ThingView
class, лучшая идея, которую я могу придумать, - создать оболочку только для чтения класса Thing
.Но это потребовало бы большого количества дублирования кода.
Существуют ли лучшие способы добиться большей инкапсуляции для подобного случая?
(Фактический код содержит около 20 классов этого типа, некоторыеиз которых образуют вложенные структуры. Кроме того, существует более двух модулей, которым требуется либо чтение, либо полный доступ к свойствам.)