@CSharpChatЭта группа больше не существует

Страница 325 из 1888
Vladimir Bondaryuk
11.02.2017
10:09:46
ILogger с помощью Ioc по всему приложению, а внутри класса реализовать на основе любого фреймворка для логирования

Alexander
11.02.2017
10:38:00
ILogger с помощью Ioc по всему приложению, а внутри класса реализовать на основе любого фреймворка для логирования
Я так почти во всех проектах года 3 делал, пока не понял что пользуюсь только NLogом.;)

Обычно если хочешь проект на поддержку получить- делать интерфейсы на каждый класс и наследовать интерфесы по 5-6 уровней. Дает очень большой шанс что в этой абстракции никто потом не захочет разбираться. ;)

Anton
11.02.2017
10:50:05
Как лучше всего передавать контекст в десериализатор и использовать его там? Есть какой-нибудь сложившийся паттерн?

Google
Anton
11.02.2017
10:52:15
Я имею в виду что-то типа такого: JsonReader.Read<MyClass>(jsonString, context);

При том, что внутри могут работать несколько разных кастомных десериализаторов и им всем нужны разные контексты

Ilya
11.02.2017
10:54:27
почему им нужны разные контексты?

Anton
11.02.2017
10:57:33
Ну скажем глубоко внутри MyClass есть некие классы Person и Group. В json'е например приходят только их id. Получается, что в кастомном десериализаторе Person нужен доступ к некому словарю Dictionary<string, Person>, а в Group к словарю Dictionary<string, Group>. Если не передавать контекст, приходится получать к этому всему доступ через static или синглтоны, что чревато проблемами

А если передавать, но приходится передавать некую обёртку, в которой есть ссылки на эти два словаря

Что тоже как-то не очень

Ну и в общем-то если нужно иметь две параллельные сессии, каждая со своими наборами данных, то статик и синглтон совсем не подходит. Остаётся только второй вариант, но я не совсем понимаю, как будет правильно его реализовать

Пока вот к такой реализации пришёл: http://pastebin.com/fe7CRFtY

Но мне интересно, как это другие делают

Slava
11.02.2017
11:26:47
Но мне интересно, как это другие делают
Чот непонятно что делаешь и зачем, но дело пахнет велосипедированием

Anton
11.02.2017
11:27:43
Чот непонятно что делаешь и зачем, но дело пахнет велосипедированием
Так я как раз и спрашиваю, как это лучше всего делать и как это обычно делается, чтобы не велосипедировать

‮ACx0
11.02.2017
11:28:22
ну вот так работет. но как-то это не очень красиво... всю жизнь приложения держать его открытым?
Ну так оно же чуть не непрерывно в него пишет, для того и открытым держать, зачем открывать-закрывать-то?

Anton
11.02.2017
11:29:48
Чот непонятно что делаешь и зачем, но дело пахнет велосипедированием
По поводу того, что непонятно: я вроде привёл пример, но могу попробовать другой придумать)

Google
‮ACx0
11.02.2017
11:30:52
Ramil
11.02.2017
11:45:05
ребята интересный вопрос

как сменить тему винды в без внешних библ?

Vladimir Bondaryuk
11.02.2017
11:48:21
Ну скажем глубоко внутри MyClass есть некие классы Person и Group. В json'е например приходят только их id. Получается, что в кастомном десериализаторе Person нужен доступ к некому словарю Dictionary<string, Person>, а в Group к словарю Dictionary<string, Group>. Если не передавать контекст, приходится получать к этому всему доступ через static или синглтоны, что чревато проблемами
А если скажем написать MyClassDessiariler. В него передаещь json, парсишь его в промежуточный клас, и заполняешь на основании этого класа основной. Что то вроде: public class Dessirializer { private readonly IPersonRepository _personRepository; private readonly IGroupRepository _groupRepository; public Dessirializer(IPersonRepository personRepository, IGroupRepository groupRepository) { _personRepository = personRepository; _groupRepository = groupRepository; } public MyClass Parse(string json) { //парсиш в предкласс //собираешь Dictionary на основе Id person\group Repository //тут собираешь MyClass } private sealed class Data { public int ParsonId { get; set; } public int GroupId { get; set; } } }

Anton
11.02.2017
11:55:19
Единственное, что у тебя метод public MyClass Parse По факту это будет два разных метода: public Person Parse(JsonStream stream) { ... } public Group Parse(JsonStream stream) { ... }

Но вообще да, наверное эти методы должны быть в том же классе, где и контекст хранится

Так что спасибо, это натолкнуло меня на мысль)

Мне кажется, у меня затык именно в том, как комбинировать эти десериализаторы. То есть может приходить куча разных json'ов. В каких-то нужен только десериализатор Person, в каких-то — только Group, а в каких-то оба. И чем больше классов, тем больше комбинаций.

Ilya
11.02.2017
12:27:51
думаю, что нужно смотреть в сторону json.net с ним это сделать проще

несколько конвертеров и всё

Anton
11.02.2017
12:36:56
несколько конвертеров и всё
Ага, посмотрел. Как я понял, у них практически такое же решение, как у меня: http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject_3.htm Только я этот список params ещё обернул в дополнительный класс.

Ладно, спасибо, буду пробовать

Ramil
11.02.2017
13:10:15
хм

хм хм хм

может кто подсказать

кое что

Sign
11.02.2017
13:13:30
Слабо писать сразу вопрос?

Ramil
11.02.2017
13:20:47
как в вебклиенте использовать путь с точкой?

Ilya
11.02.2017
13:22:46
у тебя реквест сожержит точку?

Google
Ramil
11.02.2017
13:23:11
lf

да

чем впф веббраузер отличается от винформовского кто нить знает?

Ilya
11.02.2017
13:25:35
WebUtility.UrlEncode()

только не всю урлу туда пихай

скинь пример

Ramil
11.02.2017
13:26:42
Недопустимый URI: Невозможно определить формат URI.

Ilya
11.02.2017
13:27:41
хотя точки по ходу не надо экранировать

код покажи

Ramil
11.02.2017
13:28:00
string key = @"trnsl.1.1.24323411T124358Z.8e7532jh278bce86c.ef14eb086d4660386f24324njnjikb87c3ea3563690"; string url = "https:\\translate.yandex.net\api\v1.5\tr.json\translate?key=" + key + "&text=" + tBoxInput.Text + "&lang=en-ru&format=plain";

Ilya
11.02.2017
13:29:26
и сразу, почему не string.format или интерполяция?

это раз

Ramil
11.02.2017
13:29:59
так переносить удобнее

мне бы тут пришлось 2 раза string.Format писать

Ilya
11.02.2017
13:30:17
два string url = @

поставь собаку

Ramil
11.02.2017
13:30:53
Недопустимый URI: Невозможно выполнить разбор имени хоста.

Ilya
11.02.2017
13:31:08
чем делаешь реквест?

Алексей
11.02.2017
13:31:36
А кто экранировать слеши будет?

Ramil
11.02.2017
13:31:36
пробовал Webclient и HttpWebRequest

Google
Ramil
11.02.2017
13:32:02
насколько я знаю экранировать надо только слеши "/"

а стоп

все норм, слеш не в ту сторону был

как вызвать метод через какое то время?

Axm
11.02.2017
14:03:08
По таймеру или через Task.Delay

Ramil
11.02.2017
14:05:40
task.delay принимает только имя метода?

Летучая
11.02.2017
14:06:02
как вызвать метод через какое то время?
SetTimeout(() => { // do stuff }, 1000); async void SetTimeout(Action action, uint time) { await Task.Delay(time); action(); } обёртка в стиле жс

Admin
ERROR: S client not available

Axm
11.02.2017
14:07:48
task.delay принимает только имя метода?
https://msdn.microsoft.com/ru-ru/library/system.threading.tasks.task.delay(v=vs.110).aspx

Ramil
11.02.2017
14:08:53
в мсдн вообще нет перегрузки с экшном

что то я тут не вкуриваю

...

стоп

Летучая
11.02.2017
14:09:52
я написал выше функцию setTimeout

эт нестандартная

Ramil
11.02.2017
14:15:17
как передать параметр в Action?

Летучая
11.02.2017
14:15:34
лучше в лямбде вызови метод, который нужен )

типа: setTimeout( () => { yourMethod(args) }, 1000); но есть вариант покурить извращения, типа передачи вместо Action целой функции, типа Func<T, U> func и вызове func(a, b);

Vladimir Bondaryuk
11.02.2017
14:17:00
как передать параметр в Action?
Ну тебеже прям написали как сделать. .

Google
Летучая
11.02.2017
14:17:59
я проиграл, когда обнаружил у Func 17 перегрузок 17, Карл

yegorf1
11.02.2017
14:18:15
wcf
В итоге не став париться с wcf и линухом, сделал на nancy

Летучая
11.02.2017
14:19:03
Func<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q>

Ramil
11.02.2017
14:19:45
Летучая
11.02.2017
14:20:43
yegorf1
11.02.2017
14:20:58
Мне зашло очень даже

Мне правда не нравится 100 запросов в секунду для поллинга

Но в целом, какая разница

Летучая
11.02.2017
14:22:13
купи сертификат и подключись к серверам телеги без полинга

yegorf1
11.02.2017
14:23:29
Не, ты не понял У меня два приложения Бэк и Фронт Фронт поллит Бэк через http для апдейтов И через http отправляет ему запросы, которые кладутся в очередь

Ilya
11.02.2017
14:30:13
он вроде реже реквесты шлёт

yegorf1
11.02.2017
14:31:44
Так я сам выбираю, когда их слать

Ilya
11.02.2017
14:34:06
комет даёт возможность слать меньше реквестов при этом реагировать на том же уровне

https://youtu.be/Td6QGidr8hc?t=22m43s

Ramil
11.02.2017
15:01:44
Зачем?
Смотри выше

Страница 325 из 1888

Эта группа больше не существует Эта группа больше не существует