.NET Core在program.cs里GetService获取服务实例
2024-07-18
47
在.NET Core MVC中,你可以使用依赖注入(DI)来获取服务。依赖注入是一种设计模式,它允许我们将服务的创建和管理与其使用解耦,使得代码更加可测试、可维护和可扩展。
在.NET Core MVC中,依赖注入容器负责管理应用程序中的服务。首先在program.cs里注册服务:
builder.Services.AddScoped<IArticleService, ArticleService>();
可以通过以下方式在控制器、视图或其他组件中获取服务:
public class MyController : Controller
{
private readonly IArticleService _articleService;
public MyController(IArticleService articleService)
{
_articleService = articleService;
}
// 在其他方法中使用 _articleService
}
在某些情况下,可能需要在没有构造函数或方法参数的地方获取服务。可以通过 HttpContext 的 RequestServices 属性来获取服务。例如:
var articleService = HttpContext.RequestServices.GetService<IArticleService>();
但是如果想要在program.cs里获取服务呢?假如我想在app.Run()执行前获取服务实例,调用服务的某个方法,一开始代码是这样的:
var articleService = app.Services.GetService<IArticleService>();
articleService.Method(); // 执行service的某个方法
app.Run();
这段代码执行会报错:
未经处理的异常:
System.InvalidOperationException:“Cannot resolve scoped service 'YBlog.Services.IArticleService' from root provider.”
根据微软官方文档里推荐的做法是这样的:
在应用启动时解析服务
以下代码显示如何在应用启动时限时解析范围内服务:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IMyDependency, MyDependency>();
var app = builder.Build();
using (var serviceScope = app.Services.CreateScope())
{
var services = serviceScope.ServiceProvider;
var myDependency = services.GetRequiredService<IMyDependency>();
myDependency.WriteMessage("Call services from main");
}
app.Run();
这样就能在program.cs里的app.Run()之前成功地获取服务实例然后执行服务的方法了。
更新于:3个月前赞一波!
相关文章
- .NET 9 即将推出的功能Task.WhenEach
- .NET 使用HttpClientFactory+Polly替代直接使用HttpClient
- .NET Framework被淘汰了吗?
- 强大的 .NET Mock 框架 单元测试模拟库Moq使用教程
- Asp.Net Core进程内托管 和 进程外托管的区别
- 什么是.NET云原生应用程序?
- ASP.NET Core实现多语言本地化Web应用程序
- PDFiumCore | .NET Core PDF 处理渲染库
- .NET Blazor 2024年发展趋势
- 解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法
- .NET调试Windows服务的方法
- ASP.NET Core 2.1中的ActionResult<T>
- .NET Core 3.0创建一个单独的可执行文件
- 在ASP.NET Core 2.1中使用HttpClientFactory的3种方法
- .NET Core MVC应用程序创建教程
- .NET Core中的File和PhysicalFile
- .NET Core 读取配置文件方法
- .NET Core 管道模型中间件及管道模拟实现
- ASP.NET Core多环境配置
- .NET Core 日志配置,NLog配置示例
文章评论
评论问答