将 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);
在构建之前出现的
I have class library called Persistence.EFCore contains this method
public static IServiceCollection AddPersistenceServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContext<SIMContext>(options =>
options.UseSqlServer(configuration.GetConnectionString("ConnectionString")));
services.AddTransient<IUnitOfWork, UnitOfWork>();
return services;
}
and this is my code from Program.cs in winform project
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);
}
}
I can't find a way to set the Configuration value.
The Configuration from IConfiguration supposed to get his value from
Configuration = builder.Build();
But in my case the
services.AddPersistenceServices(Configuration);
came before the build
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ConfigureService((context, services)=>{ ... }) 是 HostBuilderContext 允许您使用其 配置 属性。
因此,假设您有一个接受配置的服务扩展方法,那么您可以使用 context.Configuration 轻松地将配置传递给它。
示例
The first parameter of ConfigureService((context, services)=>{ ... }) is HostBuilderContext which gives you access to configuration, using its Configuration property.
So assuming you have a service extension method which accepts configuration, then you can easily pass configuration to it using
context.Configuration
.Example