请教 Assemblys 服务集合 跟 AppSettings.IocDll Ioc插件DLL列表
Assemblys 服务集合 AppSettings.IocDll Ioc插件DLL列表
这个Assemblys 服务集合 跟 Ioc插件DLL列表 资料我看是一样是否有什么特别的需求,需要分开存入
这个不需要干预,配置文件中的iocDll 是为了让ioc 容器扫描程序集加入ioc容器。现在 模块之间有依赖可以参考这个示例https://github.com/duyanming/Anno.Core/blob/master/samples/Packages/Anno.Plugs.SoEasyService/SoEasyBootStrap.cs
using Anno.EngineData; using System;
namespace Anno.Plugs.SoEasyService
{
///
对哥写架构有兴趣,所以想了解一下如何设计
/// <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
- 透过 Anno.config 的 IocDll/Assembly
- 透过 Anno.config 的 <FuncName></FuncName>
- 根目录 Anno.Plugs.{xxx}Service.dll
- Packages/ 里面的 Anno.Plugs.{xxx}Service.dll
- 单文件
Assemblys 的 Dic
- 透过 Anno.config 的 <FuncName></FuncName>
- 根目录 Anno.Plugs.{xxx}Service.dll
- Packages/ 里面的 Anno.Plugs.{xxx}Service.dll
- 单文件
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);
}
}