OL.FrameCore.Infrastructure/Code/ServiceCollectionExtensions.cs
(开头部分) 5KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.Loader;
using System.Text;
namespace OL.FrameCore.Infrastructure.Code
{
/// <summary>
/// 服务自动注册接口
/// </summary>
public interface IServiceRegistrar
{
void Add(IServiceCollection services, IConfiguration configuration);
int Order { get; }
}
public static class ServiceCollectionExtensions
{
public static IServiceCollection RegisterAll(this IServiceCollection services, IConfiguration configuration)
{
var types = AssemblyHelper.GetClassOfType(typeof(IServiceRegistrar), "Xms.*.dll");
foreach (var t in types)
{
var instance = (IServiceRegistrar)Activator.CreateInstance(t);
instance.Add(services, configuration);
}
return services;
}
public static IServiceCollection RegisterScope<TService>(this IServiceCollection services)
{
var serviceType = typeof(TService);
return Register(services, serviceType, ServiceLifetime.Scoped);
}
public static IServiceCollection RegisterScope(this IServiceCollection services, Type serviceType)
{
return Register(services, serviceType, ServiceLifetime.Scoped);
}
public static IServiceCollection Register(this IServiceCollection services, Type serviceType, ServiceLifetime serviceLifetime)
{
var implementTypes = AssemblyHelper.GetClassOfType(serviceType, "Xms.*.dll");
if (serviceType.IsGenericType)
{
foreach (var impl in implementTypes)
{
var it = impl.FindInterfaces((type, criteria) =>
{
var isMatch = type.IsGenericType && ((Type)criteria).IsAssignableFrom(type.GetGenericTypeDefinition());
return isMatch;
}, serviceType);
foreach (var i in it)
{
services.Add(new ServiceDescriptor(i, impl, serviceLifetime));
后面还有 111 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
