Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教 Assemblys 服务集合 跟 AppSettings.IocDll Ioc插件DLL列表 #13

Open
oneheed opened this issue Aug 9, 2023 · 3 comments
Open

Comments

@oneheed
Copy link

oneheed commented Aug 9, 2023

Assemblys 服务集合
AppSettings.IocDll Ioc插件DLL列表

这个Assemblys 服务集合 跟 Ioc插件DLL列表 资料我看是一样是否有什么特别的需求,需要分开存入

@duyanming
Copy link
Owner

这个不需要干预,配置文件中的iocDll 是为了让ioc 容器扫描程序集加入ioc容器。现在 模块之间有依赖可以参考这个示例https://github.com/duyanming/Anno.Core/blob/master/samples/Packages/Anno.Plugs.SoEasyService/SoEasyBootStrap.cs

@duyanming
Copy link
Owner

using Anno.EngineData;
using System;

namespace Anno.Plugs.SoEasyService
{
///


/// 插件启动引导器
/// DependsOn 依赖的类型程序集自动注入DI容器
///

[DependsOn(
typeof(SoEasy.Application.AppBootstrap)
//typeof(Domain.Bootstrap)
//, typeof(QueryServices.Bootstrap)
//, typeof(Repository.Bootstrap)
//, typeof(Command.Handler.Bootstrap
)]
public class SoEasyBootStrap : IPlugsConfigurationBootstrap
{
///
/// Service 依赖注入构建之后调用
///

public void ConfigurationBootstrap()
{
//throw new NotImplementedException();
}
///
/// Service 依赖注入构建之前调用
///

///
public void PreConfigurationBootstrap()
{
//throw new NotImplementedException();
}
}
}

@oneheed
Copy link
Author

oneheed commented Aug 14, 2023

对哥写架构有兴趣,所以想了解一下如何设计

    /// <summary>
    /// 服务集
    /// </summary>
    public static class Assemblys
    {
        /// <summary>
        /// 服务集合
        /// </summary>
        public static readonly Dictionary<string, Assembly> Dic = new Dictionary<string, Assembly>();
        /// <summary>
        /// Ioc模块DLL列表
        /// </summary>
        public static List<Assembly> DependedTypes { get; set; } = new List<Assembly>();
    }
    
    
    public static class AppSettings
    {
        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public static String ConnStr { get; set; }

        /// <summary>
        /// 用户重置密码的时候的默认密码
        /// </summary>
        public static String DefaultPwd { get; set; } = "Anno";
        
        /// <summary>
        /// Ioc插件DLL列表
        /// </summary>
        public static List<string> IocDll { get; set; } = new List<string>();        
    }

AppSettings 的 Add IocDll

  1. 透过 Anno.config 的 IocDll/Assembly
  2. 透过 Anno.config 的
  3. 根目录 Anno.Plugs.{xxx}Service.dll
  4. Packages/ 里面的 Anno.Plugs.{xxx}Service.dll
  5. 单文件

Assemblys 的 Dic

  1. 透过 Anno.config 的
  2. 根目录 Anno.Plugs.{xxx}Service.dll
  3. Packages/ 里面的 Anno.Plugs.{xxx}Service.dll
  4. 单文件

RegisterIoc 透过 AppSettings.IocDll 参数, 去将实体注入容器为什么不用直接用 Const.Assemblys.Dic

        public static IServiceCollection UseDependencyInjection(this IServiceCollection services)
        {
            //已经加载过的不再重新加载
            if (loader)
            {
                return services;
            }
            Const.AppSettings.IocDll.Distinct().ToList().ForEach(d =>
            {
                RegisterAssembly(services, Const.Assemblys.Dic[d]);
            });
            foreach (var assembly in Const.Assemblys.DependedTypes)
            {
                RegisterAssembly(services, assembly);
            }
            loader = true;
            return services;
        }

因为底下 PreConfigurationBootstrap 也是直接使用 Const.Assemblys.Dic

        /// <summary>
        /// IOC注入之前插件事件
        /// </summary>
        private static void PreConfigurationBootstrap()
        {
            foreach (var svc in Const.Assemblys.Dic)
            {
                InvokeDependedTypesAssemblies(svc.Value);
            }
        }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants