Как зарегистрировать открытые дженерики в ServiceCollection, если они не «равны»C#

Место общения программистов C#
Anonymous
Как зарегистрировать открытые дженерики в ServiceCollection, если они не «равны»

Сообщение Anonymous »

У меня есть открытая универсальная регистрация, которая работает нормально

Код: Выделить всё

services.AddScoped(typeof(IAsyncRepository), typeof(AsyncRepository));

Я хочу сказать, что у меня другой случай

Код: Выделить всё

public interface IAsyncEvent where TEvent : class
{
Task HandleAsync(TEvent eventArg, CancellationToken ct);
}

Код: Выделить всё

public class CreateAction(TModel model) : ICloneable where TModel : class
{
public TModel Model
{
get;
} = model;
}

Код: Выделить всё

public class CreateEventAsync(IAsyncRepository repository) : IAsyncEvent where TModel : class
{
public async Task HandleAsync(CreateAction eventArg, CancellationToken ct)
{
await repository.CreateAsync(eventArg.Model, userContext, ct);
}
}

и я хотел зарегистрировать открытый универсальный тип и разрешить его

Код: Выделить всё

services.AddScoped(
typeof(IAsyncEvent).MakeGenericType(typeof(CreateAction)),
typeof(CreateEventAsync)
);

этот код вообще не запускается

Код: Выделить всё

services.AddScoped(
typeof(IAsyncEvent)),
typeof(CreateEventAsync)
);
этот не компилируется
другой вариант с функцией может работать, но мне нужно было больше параметров, например, получить запрошенный тип, закрытый общий
или одной альтернативой было бы иметь область действия, которая вместо возврата фабрики возвращала бы тип, который нужно создать.
В этом случае это также может быть временным

Вернуться в «C#»