DOTNET CORE源码分析之IServiceCollection、ServiceCollection和ServiceCollectionDescriptorExtensions
2021-04-03 11:25
标签:ansi == esc ado clear sre move 接口 队列实现 首先谈一下IServiceCollection IServiceCollection是一个接口,它继承4个父接口,而且是和ServiceDescriptor挂钩,也就是说,它是保存ServiceDescriptor的一个数据结构接口,具体定义如下: 很明显,IServiceCollection已经具有一般列表的增删改查等基本功能了。 再谈一下ServiceCollection ServiceCollection是一个ServiceDescriptor队列实现类,主要作用是保存ServiceDescriptor对象,并且提供增删改查功能,具体定义如下: ServiceCollection中默认定义了一个已经实例化的List 既然是List 最后介绍一下ServiceCollectionDescriptorExtensions ServcieCollectionDescriptorExtensions这个类其实是用于扩展IServiceCollection的,扩展的有添加,删除,替换等功能。 在添加功能上,主要分为一般添加和指定生命周期添加,一般是先定义了ServiceDescriptor对象,然后再添加到IServiceCollection中,例如: 再如: 在删除方面,先是根据类型找到对象,然后再删除: DOTNET CORE源码分析之IServiceCollection、ServiceCollection和ServiceCollectionDescriptorExtensions 标签:ansi == esc ado clear sre move 接口 队列实现 原文地址:https://www.cnblogs.com/lizhizhang/p/12541762.htmlpublic interface IServiceCollection : IList
public class ServiceCollection : IServiceCollection, IList
private readonly List
///
public static IServiceCollection Add(
this IServiceCollection collection,
ServiceDescriptor descriptor)
{
if (collection == null)
throw new ArgumentNullException(nameof (collection));
if (descriptor == null)
throw new ArgumentNullException(nameof (descriptor));
collection.Add(descriptor);
return collection;
}
public static void TryAddTransient(this IServiceCollection collection, Type service)
{
if (collection == null)
throw new ArgumentNullException(nameof (collection));
if (service == (Type) null)
throw new ArgumentNullException(nameof (service));
ServiceDescriptor descriptor = ServiceDescriptor.Transient(service, service);
collection.TryAdd(descriptor);
}
public static IServiceCollection RemoveAll(
this IServiceCollection collection,
Type serviceType)
{
if (serviceType == (Type) null)
throw new ArgumentNullException(nameof (serviceType));
for (int index = collection.Count - 1; index >= 0; --index)
{
if (collection[index].ServiceType == serviceType)
collection.RemoveAt(index);
}
return collection;
}
上一篇:JS对象的重点
下一篇:网站做到这三点,你的才算成功!
文章标题:DOTNET CORE源码分析之IServiceCollection、ServiceCollection和ServiceCollectionDescriptorExtensions
文章链接:http://soscw.com/essay/71770.html