.net core 依赖注入设计

本文围绕.NET Core的依赖注入容器IServiceProvider展开。介绍了IServiceProvider由IServiceCollection的BuildServiceProvider()方法生成,.NET Core默认的IServiceCollection是ServiceCollection,可注入三种服务类型。还阐述了ServiceProvider通过ServiceScopeFactory提供域功能,CreateScope创建的IServiceScope为某个域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

word文档地址:https://github.com/IceEmblem/-/tree/master/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/Windows%20%E5%B9%B3%E5%8F%B0/NetCore/.net%20core/.net%20core%20%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86

参考文章:https://www.cnblogs.com/artech/p/inside-asp-net-core-1.html
.net core 的依赖注入容器是 IServiceProvider

IServiceProvider从何而来

IServiceProvider由IServiceCollection的 BuildServiceProvider() 方法生成
.net core 默认提供的IServiceCollection为ServiceCollection
我们可以向IServiceCollection注入域,单例,临时3中服务类型

public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddScoped<TService>(this IServiceCollection services) where TService: class;
 
    public static IServiceCollection AddSingleton<TService>(this IServiceCollection services) where TService: class;
 
    public static IServiceCollection AddTransient<TService>(this IServiceCollection services) where TService: class;
}

在站点生成前,我们可以向IServiceCollection注册我们的服务
站点生成时 .net core 会使用IServiceCollection生成IServiceProvider,而默认的IServiceProvider为ServiceProvider其不支持注册服务功能

ServiceProvider如何提供域功能

ServiceProvider通过ServiceScopeFactory提供域功能

internal class ServiceScopeFactory : IServiceScopeFactory
{
    private readonly ServiceProvider _provider;
    public ServiceScopeFactory(ServiceProvider provider)
    {
        _provider = provider;
    }
 
    public IServiceScope CreateScope()
    {
        return new ServiceScope(new ServiceProvider(_provider));
    }
}

传给构造函数的ServiceProvider为根依赖注入容器
通过CreateScope创建的IServiceScope为某个域

public interface IServiceScope : IDisposable
{
    IServiceProvider ServiceProvider { get; }
}

域下的ServiceProvider属性则是该域的依赖注入容器
注:ServiceProvider中已注册一个ServiceScopeFactory的单例实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值