无名商城论坛

搜索
查看: 234|回复: 0

[其他技术] 【L·S】浅谈.Net Core Dependency 六

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:32:16 | 显示全部楼层 |阅读模式
public static ServiceDescriptor Transient()    where TService : class    where TImplementation : class, TService{    //都是在调用Describe    return Describe(ServiceLifetime.Transient);}public static ServiceDescriptor Transient(Type service, Type implementationType){    //都是在调用Describe    return Describe(service, implementationType, ServiceLifetime.Transient);}public static ServiceDescriptor Describe(Type serviceType, Type implementationType, ServiceLifetime lifetime){    //还是返回ServiceDescriptor实例    return new ServiceDescriptor(serviceType, implementationType, lifetime);}public static ServiceDescriptor Describe(Type serviceType, Func implementationFactory, ServiceLifetime lifetime){    //还是返回ServiceDescriptor实例    return new ServiceDescriptor(serviceType, implementationFactory, lifetime);}通过这个我们就可以了解到ServiceDescriptor.Scoped、ServiceDescriptor.Singleton、ServiceDescriptor.Singleton其实是调用的Describe方法,Describe的本身还是去实例化ServiceDescriptor,殊途同归,只是多了种写法,最终还是去构建ServiceDescriptor。通过这么多源码的分析得出的结论就一点IServiceCollection注册的本质就是在构建ServiceDescriptor集合。服务提供#上面我们了解到了服务注册相关,至于服务是怎么提供出来的,大家应该都是非常熟悉了其实是根据IServiceCollection构建出来的CopyIServiceProvider serviceProvider = services.BuildServiceProvider();BuildServiceProvider并不是IServiceCollection的自带方法,所以也是来自扩展方法,找到ServiceCollectionContainerBuilderExtensions扩展类,最终都是在执行这个方法Copypublic static ServiceProvider BuildServiceProvider(this IServiceCollection services, ServiceProviderOptions options){    return new ServiceProvider(services, options);}BuildServiceProvider的时候需要传递ServiceProviderOptions这个类主要是配置是否校验作用域和提供的实例来自于那种提供引擎使用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表