Код: Выделить всё
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)
);
Другой вариант с функцией может работать, но мне нужно было больше параметров, например, получить запрошенный тип, закрытый общий
Или одной альтернативой было бы иметь область действия, которая вместо возврата фабрики возвращала бы тип, который нужно создать.
В этом случае это также может быть временным