Maa*_*ers 32 .net c# dependency-injection class startup
我知道如何在 .NET 5(或之前版本)的 Startup.cs 中进行依赖项注入,但是如何对 .NET 6 中的顶级 Program.cs 执行相同的操作?
.NET 5:例如,我可以在Configure方法中注入一个类
public class Startup
{
public IConfiguration _configuration { get; }
public IWebHostEnvironment _env { get; set; }
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
_configuration = configuration;
_env = env;
}
public void ConfigureServices(IServiceCollection services)
{
// TODO
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IToInjectService serviceToInject)
{
// USE SERVICE
}
}
Run Code Online (Sandbox Code Playgroud)
如何在 .NET 6 中实现这一目标?
Edu*_*_LG 47
使用 .Net 6 很容易。只需在配置应用程序服务并运行 Build 方法后执行 GetService 方法即可。
WebApplication? app = builder.Build();
var someService = app.Services.GetService<ISomeService>();
someService.DoSomething();
Run Code Online (Sandbox Code Playgroud)
Wim*_*ets 17
您将服务添加到builder.Services集合中,然后使用以下命令访问它
var myService = services.BuildServiceProvider().GetService<MyService>();
Run Code Online (Sandbox Code Playgroud)
小智 15
如果您需要在启动时使用范围服务,则您的program.cs应如下所示:
var builder = WebApplication.CreateBuilder(args);
//Add the service
builder.Services.AddScoped<IMyDependency, MyDependency>();
var app = builder.Build();
using (var serviceScope = app.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
var myDependency = services.GetRequiredService<IMyDependency>();
//Use the service
myDependency.DoSomething();
}
app.Run();
Run Code Online (Sandbox Code Playgroud)
来自: 在应用程序启动时解析服务
它确实适用于 mi DbInitializer
在文件中,program.cs您可以通过以下方式管理您的服务builder.Services
例如,我添加了 DbContext 和基于 Singleton 模式和 Scoped 的两个不同服务
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddDbContext<MyDbContext>(options =>
{
// options.UseSqlServer(...);
});
builder.Services.AddSingleton<IMyService, MyService>();
builder.Services.AddScoped<IMySessionBasedService, MySessionBasedService>();
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看迁移到 ASP.NET Core 6.0 中新的最小托管模型的代码示例