
Roman
03.07.2017
23:43:54
В общем решает конкретную задачу, а именно - хранитель объектов-помошников. Например, редактор строк, редактор цветов и т. д.
В общем то вопрос в силе. Это DI или нет?

Artem
03.07.2017
23:53:21
Скорее это нечто похожее на IOC контейнер
Который потом можно использовать для di / service locator

Google

Roman
03.07.2017
23:55:28
Понял, спасибо. А как из этого сделать di?
А понял. Вызов его методов и есть di?
Правильно? Или я запутался...

Igor
03.07.2017
23:59:34
Кстати, там можно подскоратить код
public TInteface GetObjSingleton<TInteface>() where TInteface : class
{
_dependecies.TryGetValue(typeof(TInteface), out var result);
return result as TInteface;
}

Artem
04.07.2017
00:00:50
По факту идея такая - нужно в одном месте (обычно при старте программы) (и называется оно Composition root) положить все реализации в этот самописный контейнер, используя метод Add(...)
Далее, когда понадобится ссылка на какой либо объект типа TInterface использовать не new() а сам контейнер, для получения этого объекта
Будет нечто похожее ... на Service Locator
Сам же DI достигается путем построения конфигурации этого контейнера в начале программы, запроса всех зависимостей для сущности в контурукторе к примеру, а само конструирования сущности должно быть делегировано этому контейнеру, который на основе своей конфигурации будет удовлетворять и разруливать все зависимости

Roman
04.07.2017
00:03:59

Artem
04.07.2017
00:04:00
class Foo
{
public Foo(IA a)
{
_a = a;
}
private readonly IA _a;
}
....
Container.Register<A?).As<IA?);
Container.Register<Foo?).AsSelf();
....
var foo = Container.Create<Foo?);

Roman
04.07.2017
00:09:10
https://pastebin.com/k3SVW9qx
То есть вот так... Выходит я "изобрёл" Сервис Локатор?

Igor
04.07.2017
00:11:10
Который считается антипаттерном (хотя это спорно)
http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/
Кстати, можно код еще сильнее ужать:
public TInteface GetObjSingleton<TInteface>() where TInteface : class =>
_dependecies.TryGetValue(typeof(TInteface), out var x) ? x as TInteface : null;

Artem
04.07.2017
00:11:14
Вообще, если по Моему тут просто пулл заранее созданных и готовых объектов

IM2STRNG4DTWRLD
04.07.2017
00:13:44

Artem
04.07.2017
00:13:58
Потому что сами объекты видимо создаются заранее и помещаются туда, а потом по ключу выбираются
Все таки все контейнеры, вне зависимости от использования ответственны за создание и управление жизнью сущностей

Google

Artem
04.07.2017
00:14:03
Это ночь, каюсь

Roman
04.07.2017
00:14:26
Артём, в последней версии сам создаёт
Увидел оплошность...
Этот код можно пускать в рабочий проект?

Igor
04.07.2017
00:16:05

Artem
04.07.2017
00:16:44
Смотря какую задачу решает , но все для рабочих проектор обычно рекомендуется использовать готовые решения

Roman
04.07.2017
00:16:52

Artem
04.07.2017
00:17:22
Коих полно - autofac, ninject, unity, Windsor, simple injector

Roman
04.07.2017
00:17:33
Готовое это Ninject?

Artem
04.07.2017
00:17:56
Это все различные библиотеки

Roman
04.07.2017
00:18:02
ага, понял. Но как то сложновато)))
Да, я понимаю.
Не все они совместимы с Xamarin
Или руки не из того места...
у меня. Завтра попробую ninject снова.
Вообще все началось с того что мне нужно было где то хранить экземпляр ICrossColorHelper<T>

Artem
04.07.2017
00:22:52
Ну по поводу совместимости с xamarin - не знаю, не сталкивался с ним
Повторюсь, обычно все зависит от задачи , если требуется простое решение на 1 раз, то может и не стоит тянуть различного рода библиотеки. В противном же случае, лучше подумать, и посмотреть в сторону готовых решений - экономия времени и нервов

Roman
04.07.2017
00:24:10
Окей, спасибо за содержательные ответы. Многое прояснилось

Igor
04.07.2017
00:24:25
Не все они совместимы с Xamarin
В XF есть свой примитивный servicelocator.
А вообще если приспичело, можно servicelocator скачать с nuget (там буквально весь пакет состоит из парочки классов)

Roman
04.07.2017
00:25:47
Про XF да, но у меня Xamarin Native. И там какая то платформа обычно выделывается (как правило iOS)

Google

Roman
04.07.2017
00:26:20
Мне бы open source посмотреть
Что примитивное

Nurbek
04.07.2017
04:24:43
Всем привет, возник такой вопрос. В каких кейсах нужно скрывать метод ключевым словом new? И зачем это нужно, если все равно будет использоваться метод класса, от которого мы наследуемся? Можно с примерами, если возможно?

Evgeniy
04.07.2017
04:29:57

Nurbek
04.07.2017
04:42:43

Nikita
04.07.2017
05:46:24

Вячеслав
04.07.2017
05:48:28
Пасоны такой вопрос: есть вбюмодел внутри которой вертится фоновый поток, запрашивает данные и в контексте UI выводит их на вьюху, поток можно отменить стандартным паттерном CancellationTokenSource. Если я в один момент удаляю ссылку на эту вьюмодел, но перед этим вызываю отмену, но не дожидаюсь завершения потока, то что произойдет в этот момент? число теоретически поток может получить данные и захотеть присвоить их вьюмодел, ссылку на которую я удалил и не факт что объект не удалил GC. Выапдет эксепшн? если да то в каком контексте?

Andrey
04.07.2017
05:52:05

Вячеслав
04.07.2017
05:54:32
там внутри такая хрень
while(!toke.IsCancellationrequested)
{ // читаем данне
Application.Current.Dispatcher.Invoke( //обновляем данные)
}
есть возможность что цикл пройдет

Вадим
04.07.2017
06:13:15
Привет всем
Ребят, а для поиска объекта в xml файле, не десериализуя его полностью подойдёт класс xmldocument? Или есть способ лучше?

Анатолий
04.07.2017
06:15:21

Анатолий
04.07.2017
06:16:02

Nikita
04.07.2017
06:20:44

Viktor
04.07.2017
06:22:01
Посоны, какой di-контейнер самый быстрый?

Artem
04.07.2017
06:22:30
о, кстати про DI контейнеры.
а что сейчас модно?
смотрю много кто за autofac топит, но есть же суперский DI из asp net core, который как обычный пакет в нугете и можно вообще везде юзать

Viktor
04.07.2017
06:23:03
у автофака есть фатальный недостаток: там по-ебанутому сделана работа с декораторами
приходится свои огороды вокруг городить

Nikita
04.07.2017
06:24:17
какой вот "самый-самый" вопрос спорный

Google

Artem
04.07.2017
06:27:24
https://github.com/danielpalme/IocPerformance/blob/master/README.md

Friedrich
04.07.2017
06:28:06
Мы сегодня нашли какие-то совершенно кошмарные баги в XmlSerializer: если внутри тега, соответствующего [XmlArrayItem], будут левые дочерние элементы, то внутренний стейт парсера ломается, XmlSerializer.UnknownElement перестаёт генерироваться, и вообще всё становится плохо.
На коре нормально — XmlSerializer.UnknownElement оттуда выпилили, а внутренний стейт парсера больше не ломается.

Vladimir Bondaryuk
04.07.2017
06:29:25

Viktor
04.07.2017
06:36:20

Admin
ERROR: S client not available

Viktor
04.07.2017
06:36:50

Vladimir Bondaryuk
04.07.2017
06:40:43
Хм, вроде хватает функционала
Про декораторы, если ты об этом: https://bitbucket.org/dadhi/dryioc/wiki/Decorators

Viktor
04.07.2017
06:41:37
о, круто, спасибо
здесь и reuse из коробки, охуенно

Vladimir Bondaryuk
04.07.2017
06:43:06
Да
container.Register<IFoo, Foo>( Parameters.Of.Type<IDependency>(typeof(TestDependency));
container.Register<IFoo, Foo>( Parameters.Of.Type<IDependency>("idep");
https://bitbucket.org/dadhi/dryioc/wiki/SpecifyDependencyAndPrimitiveValues

Mikhail
04.07.2017
07:02:29
добрый день. Здесь вопросы по WinForms еще не считаются моветоном?)

Friedrich
04.07.2017
07:04:17
Кое-кем считаются, но это не официальная позиция.

Viktor
04.07.2017
07:09:17
щас диды придут

Женя
04.07.2017
07:09:37

Timur
04.07.2017
07:12:00

Google

Леонид
04.07.2017
07:12:54

Му
04.07.2017
07:15:48

Hell
04.07.2017
07:32:15
посоны поздравте меня с первым LINQ LEFT JOIN query результат которого сериализуется в JSON передается по айкасу на клиента и там его рендерит кнокаут

Вадим
04.07.2017
07:34:41

Анатолий
04.07.2017
07:36:09

Вадим
04.07.2017
07:40:30
Выглядит файл примерно так
'''
<Artists>
<Artist>
<Name>bla bla<Name/>
<Albums>
...
<Albums/>
<Artist/>
<Artists/>
'''
Чет не вышло

Nikita
04.07.2017
07:42:24
на сервере сейчас стараюсь использовать встроенный от мелкомягких
ибо из коробки всё работает
хотя тут в "про" чате был перец, который в 2017-ом году делал проект на винформах из C++/CLI

Вадим
04.07.2017
07:45:03

Gid
04.07.2017
07:47:49
Всё, winforms police в чате
Эта группа больше не существует