Вам нужно определить Action<AppConfiguration>
для использования где-нибудь.
Если вы, например, определите его в классе Startup
, вы можете использовать перегрузку AddScoped
, которая принимает IServiceProvider
, чтобы разрешить другие зависимости и внедрить его следующим образом:
void TheAction(AppConfiguration appConfiguration) { }
services.AddScoped<IGenericTDRRepository<RMesg>, RmesgOracleReposityory>(serviceProvider =>
{
var logger = serviceProvider.GetRequiredService<ILogger<RmesgOracleReposityory>>();
var generator = serviceProvider.GetRequiredService<IUpdateSqlStringGenerator<RMesg>>();
return new RmesgOracleReposityory(logger, TheAction, generator);
});
Вы также можете определить его в классе RmesgOracleReposityory
и передать его конструктору базового класса:
public class RmesgOracleReposityory : GenericOracleTDRRepository<RMesg>, IGenericTDRRepository<RMesg>
{
public RmesgOracleReposityory(ILogger<RmesgOracleReposityory> logger,
IUpdateSqlStringGenerator<RMesg> generator)
: base(logger, TheAction, generator)
{
Logger = logger;
}
private void TheAction(AppConfiguration appConfiguration) { }
public new ILogger<RmesgOracleReposityory> Logger { get; }
}
Action<T>
просто инкапсулирует метод void
, который принимает один параметр типа T
.