Yuebon.NetCore/Yuebon.Commons/Core/Module/MoudleService.cs

(开头部分) 3KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using AutoMapper;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using Yuebon.Commons.Repositories;
using Yuebon.Commons.IoC;
using Yuebon.Commons.Linq;
using Yuebon.Commons.Log;

namespace Yuebon.Commons.Module
{
    /// <summary>
    /// 模块服务
    /// </summary>
    public class MoudleService
    {
        /// <summary>
        /// 实现应用模块程序集的注册服务
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static IServiceProvider LoaderMoudleService(IServiceCollection services)
        {
           // services.AddScoped(typeof(IUnitOfWork), typeof(UnitOfWork));
            var apps = AppContext.BaseDirectory + "Apps";
            if (!Directory.Exists(apps))
            {
                Directory.CreateDirectory(apps);
            }
            // 把 Apps 下的动态库拷贝一份来运行,
            // 使 Apps 中的动态库不会在运行时被占用(以便重新编译)
            var targetPath = PrepareShadowCopies();
            // 从 Shadow Copy 目录加载 Assembly 并注册到 Mvc 中
            //LoadFromShadowCopies(targetPath);

            string PrepareShadowCopies()
            {
                // 准备 Shadow Copy 的目标目录
                var target = Path.Combine(AppContext.BaseDirectory, "app_data", "apps-cache");

                if (!Directory.Exists(target))
                {
                    Directory.CreateDirectory(target);
                }
                // 找到插件目录下 bin 目录中的 .dll,拷贝
                 Directory.EnumerateDirectories(apps)
                    .Select(path => Path.Combine(path, "bin"))
                    .Where(Directory.Exists)
                    .SelectMany(bin => Directory.EnumerateFiles(bin, "*.dll"))
                    .ForEach(dll => File.Copy(dll, Path.Combine(target, Path.GetFileName(dll)), true));

                return target;
            }

            DirectoryInfo folder = new DirectoryInfo(targetPath);
            List<Assembly> myAssembly = new List<Assembly>();
            myAssembly.Add(Assembly.Load("Yuebon.Security.Core"));
后面还有 28 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

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