/// <summary> /// 添加类型 /// </summary> /// <param name="services"></param> /// <param name="type"></param> /// <param name="exportServicesProvider"></param> protected virtual void InternalAddType(IServiceCollection services, Type type, IExportServicesProvider exportServicesProvider) { var exportServiceTypes = GetExportServiceTypes(exportServicesProvider, type); foreach (var exportServiceType in exportServiceTypes) { var serviceDescriptor = ServiceDescriptor.Describe(exportServiceType, type, exportServicesProvider.Lifetime); switch (exportServicesProvider.AddDIMode) { case AddDIMode.TryAdd: services.TryAdd(serviceDescriptor); break; case AddDIMode.Replace: services.Replace(serviceDescriptor); break; case AddDIMode.Default: default: services.Add(serviceDescriptor); break; } } }
/// <summary> /// 获取导出的服务类型 /// </summary> /// <param name="exportServicesProvider"></param> /// <param name="targetType"></param> /// <returns></returns> public static IEnumerable <Type> GetServiceExportTypes(this IExportServicesProvider exportServicesProvider, Type targetType) { return(exportServicesProvider.GetExportServiceTypes(targetType).Distinct()); }
/// <summary> /// 获取类型的导出服务类型 /// </summary> /// <param name="exportServicesProvider"></param> /// <param name="type"></param> /// <returns></returns> protected virtual IEnumerable <Type> GetExportServiceTypes(IExportServicesProvider exportServicesProvider, Type type) => ExportServicesUtil.GetServiceExportTypes(exportServicesProvider, type);