src/NetCore/DI/ServiceExtension.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;
using System.Reflection;
using System.Runtime.Loader;
using YL.Utils.Check;
using YL.Utils.Extensions;
namespace YL.NetCore.DI
{
/// <summary>
/// net core mvc 容器DI
/// </summary>
public static class ServiceExtension
{
/// <summary>
/// 单个注册DI
/// </summary>
/// <typeparam name="TService"></typeparam>
/// <typeparam name="TImplementation"></typeparam>
/// <param name="services"></param>
/// <param name="injection"></param>
public static void Register<TService, TImplementation>(IServiceCollection services, ServiceLifetime injection = ServiceLifetime.Scoped)
{
//ServiceCollectionDescriptorExtensions
switch (injection)
{
case ServiceLifetime.Scoped:
services.AddScoped(typeof(TService), typeof(TImplementation));
break;
case ServiceLifetime.Singleton:
services.AddSingleton(typeof(TService), typeof(TImplementation));
break;
case ServiceLifetime.Transient:
services.AddTransient(typeof(TService), typeof(TImplementation));
break;
}
}
//public static void AddService(this IServiceCollection services)
//{
// var defaultAssemblyNames = DependencyContext.Default.GetDefaultAssemblyNames().Where(a => a.FullName.Contains("Services")).ToList();
// var assemblies = defaultAssemblyNames.SelectMany(a => AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("Services")).ExportedTypes.Where(b => b.GetInterfaces().Contains(typeof(IDependency)) && !b.IsAbstract).ToList()).ToList();
// assemblies.ForEach(assembliy =>
// {
// services.AddScoped(assembliy);
// });
//}
/// <summary>
/// 泛型注册
/// </summary>
/// <param name="services"></param>
/// <param name="injection"></param>
/// <summary>
后面还有 86 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。