SingleInstanceModule.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Autofac;
  2. using Microsoft.Extensions.DependencyModel;
  3. using System.Linq;
  4. using System.Reflection;
  5. using ZhonTai.Admin.Core.Attributes;
  6. using ZhonTai.Admin.Core.Configs;
  7. using Module = Autofac.Module;
  8. namespace ZhonTai.Admin.Core.RegisterModules;
  9. public class SingleInstanceModule : Module
  10. {
  11. private readonly AppConfig _appConfig;
  12. /// <summary>
  13. /// 单例注入
  14. /// </summary>
  15. /// <param name="appConfig">AppConfig</param>
  16. public SingleInstanceModule(AppConfig appConfig)
  17. {
  18. _appConfig = appConfig;
  19. }
  20. protected override void Load(ContainerBuilder builder)
  21. {
  22. // 获得要注入的程序集
  23. Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
  24. .Where(a => _appConfig.AssemblyNames.Contains(a.Name) || a.Name == "ZhonTai.Admin")
  25. .Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
  26. //无接口注入单例
  27. builder.RegisterAssemblyTypes(assemblies)
  28. .Where(t => t.GetCustomAttribute<SingleInstanceAttribute>() != null)
  29. .SingleInstance()
  30. .PropertiesAutowired();
  31. //有接口注入单例
  32. builder.RegisterAssemblyTypes(assemblies)
  33. .Where(t => t.GetCustomAttribute<SingleInstanceAttribute>() != null)
  34. .AsImplementedInterfaces()
  35. .SingleInstance()
  36. .PropertiesAutowired();
  37. }
  38. }