Pull to refresh

Comments 10

Способ интересный, но немного странный.

Мне кажется, можно было сделать немного проще, применив паттерн «одиночка» (singleton), как советуют тут. И экземпляр отовсюду доступен, и поля сериализуемы.
Все верно, одиночке тут самое место, к тому же, если вдруг в будущем понадобится несколько экземпляров AppSettings, переделать одиночку будет гораздо проще чем статический класс.
Достаточно иметь
static class ParamsHolder
{
public Params Params{get;private set;}
}

И проблема сериализации безвелосипедно решена.

У нас в трехзвенке определен
public interface IEnvironmentParamsHolder
{
EnvironmentParamsInfo Params { get; }
}

Интерфейс имеет различные реализации на сервере и на клиенте. Пользователи получают его через IoC
Извиняюсь за форматирование кода:(
Тоже так велосипедил, правда делал через protobuf, и по полям и свойствам
FieldInfo[] fields = type.GetFields(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
PropertyInfo[] properties = type.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);

Плюc добавлял проверку на специальный аттрибут, указывающий что данное поле/свойство должно быть сохранено.

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public class ForSave : Attribute
{
}
.....

if (Attribute.IsDefined(field, typeof(ForSave)))


А по вашему способу вопрос, как он обработает массив [] или Generic?
UFO just landed and posted this here
Не пробовал, я не так давно начал изучать патерны, занимался разработкой драйверов и до патернов не было времени (к сожалению).
А в драйверах ООП совсем не применяется?
для того чтобы писать драйвера с использованием DDK используется С, а не С++ и как следствие ни каких ООП там не может быть.
Sign up to leave a comment.

Articles