栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.Net C# 通过IServiceProvider手动获取注入的服务

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.Net C# 通过IServiceProvider手动获取注入的服务

在.Net 开发中使用内置依赖注入框架注入的服务有时候我们需要在运行时获取对应的实例,这个时候就无法通过构造函数的形式来获取了。

这种情况可以使用IServiceProvider的GetService方法获取我们需要的服务实例。

使用这种方法的时候先在构造函数中获取 IServiceProvider 服务,然后就可以在方法中使用了。

参考代码:

public class Worker : BackgroundService
    {
        private readonly ILogger _logger;

        private readonly IHttpClientFactory _clientFactory;

        private readonly IServiceProvider _provider;

        public Worker(ILogger logger,
            IHttpClientFactory clientFactory,
            IServiceProvider provider) =>
            (_logger, _clientFactory, _provider) =
                (logger, clientFactory, provider);

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                //使用注入的IServiceProvider服务手动获取ILogger对象
                ILogger _logger1 = (ILogger)_provider.GetService(typeof(ILogger));

                await Task.Delay(3000 * 20 * 60 * 5, stoppingToken);
            }
        }
}

请避免使用 IApplicationBuilder.ApplicationServices、service.BuildServiceProvider() 的静态对象的方式获取服务。

其他请参考官方文档:依赖关系注入指南 | Microsoft Docs

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904728.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号