Size: a a a

var chat = new Chat();

2021 August 12

ВО

Влад Ого in var chat = new Chat();
не, о том что можно создавать 10 инстансов сходу
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ты понял идею которую я выше описал?
источник

Ɖ

Ɖrēw in var chat = new Chat();
У тебя не будет создаватсья инстансов команд. у тебя будут создаваться 1 РАЗ 10 инстансов дескрипторов. каждый весить будет байт 100 максимум (если длинное название команды)
источник

E

Etki in var chat = new Chat();
Если нет дичи типа "полезем на диск в конструкторе", то создание инстанса это бесплатная операция
источник

ВО

Влад Ого in var chat = new Chat();
та понял, но делать еще и дескрипторы к каждой команде как-то слишком
источник

Ɖ

Ɖrēw in var chat = new Chat();
record CommandDescriptor(string CommandName, Type CommandType);
источник

ВО

Влад Ого in var chat = new Chat();
но вообще идея интересная
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ужасно сложно
источник

VL

Vova Lantsov in var chat = new Chat();
Рекомендую на этапе регистрации сервисов, где ты вызываешь foreach - AddScoped/Transient
Регать также синглтон менеджер, в который передай все зареганные типы массивов

var types = Assembly.GetTypes().Where(t => ...).ToArray();
foreach (var type in types)
   services.AddScoped(typeof(ICommand), type);

services.AddSingleton<ICommandManager, CommandManager>(provider =>
{
   return ActivatorUtilities.CreateInstance<CommandManager>(provider, types);
});

В конструкторе CommandManager можешь получить массив Type[]
Также получи там сервис провайдер. И сможешь уже создавать нужную команду индивидуально
_serviceProvider.GetService(typeof(ICommand), _types[0])...
источник

Ɖ

Ɖrēw in var chat = new Chat();
ActivatorUtilities.CreateInstance<CommandManager>(provider, types); - зачем так длинно?
источник

VL

Vova Lantsov in var chat = new Chat();
Чтобы ди работало
Мы тут перезаписали логику ди, чтобы прокинуть массив
источник

VL

Vova Lantsov in var chat = new Chat();
Можно конечно и массив типов добавить в di
источник

ВО

Влад Ого in var chat = new Chat();
тоесть имя команды лежит не рядом с класом, который ее описывает?
источник

Ɖ

Ɖrēw in var chat = new Chat();
Почитай мой вариант. мне кажется он проще
источник

VL

Vova Lantsov in var chat = new Chat();
Скажем так, я бы сделал так как я написал
источник

VL

Vova Lantsov in var chat = new Chat();
Твой вариант тоже имеет право на жизнь, разные способы достичь того же
источник

ВО

Влад Ого in var chat = new Chat();
ну и с таким подходом уже можно просто статик дикшинари создать стринг-Тайп, имя команды - ее тип, и вообще без ди обойтись)
источник

Ɖ

Ɖrēw in var chat = new Chat();
Это будет убогое говно, сорри
источник

Ɖ

Ɖrēw in var chat = new Chat();
У тебя есть DI, а ты предлагаешь вернуться к синглтону в каменный век
источник

ВО

Влад Ого in var chat = new Chat();
да ничем не отличается от такого же дикшинари, полученого через ди
источник