ConfigureFrameworkServices.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using CZFW.Framework.Interface;
  6. using System.Threading;
  7. using System.Reflection;
  8. using System.IO;
  9. using System.Linq;
  10. using Microsoft.AspNetCore.Http;
  11. namespace CZFW.Framework.Logic
  12. {
  13. public static class ConfigureFrameworkServicesExtensions
  14. {
  15. public static IServiceCollection ConfigureFrameworkServices(this IServiceCollection services)
  16. {
  17. services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  18. services.AddTransient<IUserInfo, UserInfoLogic>();
  19. services.AddTransient<IUserRole, UserRoleLogic>();
  20. services.AddTransient<IRole, RoleLogic>();
  21. services.AddTransient<IPrivilege, PrivilegeLogic>();
  22. services.AddTransient<IPrivilegeGroup, PrivilegeGroupLogic>();
  23. services.AddTransient<IDict, DictLogic>();
  24. services.AddTransient<IDictItem, DictItemLogic>();
  25. services.AddTransient<IUserRoleNavigation, UserRoleNavigationLogic>();
  26. services.AddTransient<ICustomerUserPrivilege, CustomerUserPrivilegeLogic>();
  27. services.AddLogging();
  28. return services;
  29. }
  30. public static void Configure(ref IServiceCollection services, IList<string> interfaceDlls, IList<string> interfaceNamespaces, IList<string> serviceDlls)
  31. {
  32. string path = Thread.GetDomain().BaseDirectory;
  33. if (path.LastIndexOf("Debug", StringComparison.Ordinal) != -1)
  34. {
  35. path = path.TrimEnd(@"\Debug".ToCharArray());
  36. }
  37. else
  38. {
  39. path += "bin";
  40. }
  41. IList<FileInfo> interfaceFiles = new List<FileInfo>();
  42. foreach(var item in interfaceDlls)
  43. {
  44. var file = new FileInfo($"{path}\\{item}");
  45. interfaceFiles.Add(file);
  46. }
  47. var baseInterface = typeof(IDependency);
  48. var interfaceAssemblies = interfaceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList();
  49. List<Type> itfs = new List<Type>();
  50. foreach(var item in interfaceAssemblies)
  51. {
  52. var tp1 = item.GetTypes().Where(x => x.IsInterface&&interfaceNamespaces.Contains(x.Namespace)).ToList();
  53. itfs.AddRange(tp1);
  54. }
  55. IList<FileInfo> serviceFiles = new List<FileInfo>();
  56. foreach(var item in serviceDlls)
  57. {
  58. var file = new FileInfo($"{path}\\{item}");
  59. serviceFiles.Add(file);
  60. }
  61. var servicesAssemblies = serviceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList();
  62. List<Type> serviceTypes = new List<Type>();
  63. foreach(var item in servicesAssemblies)
  64. {
  65. var tp = item.GetTypes().Where(x => x.IsClass);
  66. serviceTypes.AddRange(tp);
  67. }
  68. foreach(var item in itfs)
  69. {
  70. var serviceType = serviceTypes.Where(x => x.GetInterfaces().Contains(item)).FirstOrDefault();
  71. services.AddTransient(item, serviceType);
  72. //services.AddTransient<item,serviceType>
  73. }
  74. //Assembly[] assemblies = new DirectoryInfo(path).GetFiles("CZ*.*.dll", SearchOption.AllDirectories)
  75. // .Select(x => Assembly.LoadFrom(x.FullName)).ToArray();
  76. }
  77. }
  78. }