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 积分,解读结果公开显示在下面。

还没有人解读过这个文件。