Size: a a a

var chat = new Chat();

2021 June 29

ВО

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

Ɖ

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

Ɖ

Ɖrēw in var chat = new Chat();
Чтобы не такую сильную связность делать
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ну вот и сделай там типо
IBaseUserController<T>, например IBaseUserController<City>
источник

OD

Oleksandr Desiatnyk in var chat = new Chat();
Ну да, я имел в виду что-нибудь что сможет идентифицировать сервис, сам класс реализацию прокидывать неоч идея)
источник

Ɖ

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

Ɖ

Ɖrēw in var chat = new Chat();
Просто чаще всего модель делать дженерик типом еще и практический смысл имеет ибо чаще всего методы тоже дженерик
источник

VL

Vova Lantsov in var chat = new Chat();
Есть вариант с "фабрикой" (я с памяти накидал, чтобы саму идею передать)

services.AddTransient<IBaseUserController, BaseEntityController<..., ..., ...>>();
services.AddTransient<IBaseUserController, BaseEntityController<..., ..., ...>>();
services.AddTransient<IBaseUserController, BaseEntityController<..., ..., ...>>();

services.AddTransient<Func<Type, IBaseUserController>>(provider =>
{
   return type =>
   {
       var controllers = provider.GetServices(typeof(IBaseUserController)).Cast<IBaseUserController>().ToArray();
       return controllers.FirstOrDefault(c => c.GetType() == type);
   };
});
источник

VL

Vova Lantsov in var chat = new Chat();
Но эта идея мне больше нравится
источник

Ɖ

Ɖrēw in var chat = new Chat();
Ух тут конечно
источник

Ɖ

Ɖrēw in var chat = new Chat();
Крепко
источник

VL

Vova Lantsov in var chat = new Chat();
)) создаются сразу все сервисы, а не один нужный
источник

Ɖ

Ɖrēw in var chat = new Chat();
Я просто люблю больше задач перекладывать на систему типов нежели на рефлексию
источник

Ɖ

Ɖrēw in var chat = new Chat();
Это дает множество плюсов
источник

VL

Vova Lantsov in var chat = new Chat();
Кстати, я вот задумался, очень интересно как дженерик логгер передаётся

public MyController(ILogger<MyController> logger) { }

Оно как-то его резолвит на уровне di, скорее всего там какая-то логика ниже уровнем чем .AddTransient<T>, они ведь явно в рантайме не регистрируют логгер для каждого контроллера и сервиса из разряда

foreach (var serviceType in ...)
   services.AddTransient(typeof(ILogger<>).MakeGenericType(new[] {serviceType}), ...);
источник

VL

Vova Lantsov in var chat = new Chat();
Потом залезу в исходники, посмотрю как они сделали)
источник

MN

Mr. N in var chat = new Chat();
по ідеї так a.GetType();
источник

MN

Mr. N in var chat = new Chat();
if (a.GetType()==b.GetType()){}
источник

AS

Anton Sher in var chat = new Chat();
Сделай интерфейс ещё один
источник

AS

Anton Sher in var chat = new Chat();
Наследуешься им от базового интерфейса
источник