public IForgeBuilder AddShard <TMithrilShard, TMithrilShardSettings, TMithrilShardSettingsValidator>(Action <HostBuilderContext, IServiceCollection> configureDelegate, Action <IHostBuilder>?preBuildAction = null) where TMithrilShard : class, IMithrilShard where TMithrilShardSettings : class, IMithrilShardSettings, new() where TMithrilShardSettingsValidator : class, IValidateOptions <TMithrilShardSettings> { //register shard configuration settings _hostBuilder.ConfigureServices((context, services) => { var optionsBuilder = services .AddOptions <TMithrilShardSettings>() .Bind(MithrilShardSettingsManager.GetSection <TMithrilShardSettings>(context.Configuration)) .ValidateOnStart(); optionsBuilder.Services.AddSingleton <IValidateOptions <TMithrilShardSettings> >(new DataAnnotationValidateOptions <TMithrilShardSettings>(optionsBuilder.Name)); //register the shard configuration setting as IMithrilShardSettings in order to allow DefaultConfigurationWriter to write default its default values services.AddSingleton <IMithrilShardSettings, TMithrilShardSettings>(); context.SetShardSettings <TMithrilShardSettings>(services); }); AddShard <TMithrilShard>(configureDelegate, preBuildAction); return(this); }
public IForgeBuilder AddShard <TMithrilShard, TMithrilShardSettings>(Action <HostBuilderContext, IServiceCollection> configureDelegate) where TMithrilShard : class, IMithrilShard where TMithrilShardSettings : class, IMithrilShardSettings { this.AddShard <TMithrilShard>(configureDelegate); //register shard configuration settings this.hostBuilder.ConfigureServices((context, services) => { services.Configure <TMithrilShardSettings>(MithrilShardSettingsManager.GetSection <TMithrilShardSettings>(context.Configuration)); //register the shard configuration setting as IMithrilShardSettings in order to allow DefaultConfigurationWriter to write default its default values services.AddSingleton <IMithrilShardSettings, TMithrilShardSettings>(); }); return(this); }