将IConfiguration注入.NET 6.0上的windows窗体



我有一个名为Persistence.EFCore的类库,它包含这个方法

public static IServiceCollection AddPersistenceServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContext<SIMContext>(options =>
options.UseSqlServer(configuration.GetConnectionString("ConnectionString")));
services.AddTransient<IUnitOfWork, UnitOfWork>();
return services;
}

这是我在winform项目中的Program.cs中的代码

public static IConfiguration Configuration { get; }
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
var builder = new HostBuilder()
.ConfigureAppConfiguration((hostContext, builder) =>
{
builder.AddJsonFile("apsettings.json", optional: true, reloadOnChange: true);

})
.ConfigureServices((hostContext, services) =>
{
services.AddScoped<XtraMain>();
services.AddPersistenceServices(Configuration);
services.AddApplicationServices();
services.AddTransient<FrmExpressionOfNeeds>();
services.AddSingleton<IFormFactory, FormFactory>();
});
var host = builder.Build();
using (var serviceScope = host.Services.CreateScope())
{
IServiceProvider services = serviceScope.ServiceProvider;
XtraMain mainform = services.GetRequiredService<XtraMain>();
System.Windows.Forms.Application.Run(mainform);
}
}

我找不到设置"配置"值的方法
IConfiguration中的配置应该从中获取其值

Configuration = builder.Build();

但就我而言,

services.AddPersistenceServices(Configuration);

在构建之前

ConfigureService的第一个参数((context,services(=>{…}(是HostBuilderContext,它允许您使用其configuration属性访问配置。

因此,假设您有一个接受配置的服务扩展方法,那么您可以使用context.Configuration轻松地将配置传递给它。

示例

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
var host = CreateHostBuilder().Build();
Application.Run(host.Services.GetRequiredService<Form1>());
}
static IHostBuilder CreateHostBuilder() =>
Host.CreateDefaultBuilder()
.ConfigureServices((context, services) =>
{
services.AddHelloServices(context.Configuration);
services.AddTransient<Form1>();
});
}

最新更新