123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Microsoft.Extensions.DependencyInjection;
- using CZFW.Framework.Interface;
- using System.Threading;
- using System.Reflection;
- using System.IO;
- using System.Linq;
- using Microsoft.AspNetCore.Http;
- namespace CZFW.Framework.Logic
- {
- public static class ConfigureFrameworkServicesExtensions
- {
- public static IServiceCollection ConfigureFrameworkServices(this IServiceCollection services)
- {
- services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
- services.AddTransient<IUserInfo, UserInfoLogic>();
- services.AddTransient<IUserRole, UserRoleLogic>();
- services.AddTransient<IRole, RoleLogic>();
- services.AddTransient<IPrivilege, PrivilegeLogic>();
- services.AddTransient<IPrivilegeGroup, PrivilegeGroupLogic>();
- services.AddTransient<IDict, DictLogic>();
- services.AddTransient<IDictItem, DictItemLogic>();
- services.AddTransient<IUserRoleNavigation, UserRoleNavigationLogic>();
- services.AddTransient<ICustomerUserPrivilege, CustomerUserPrivilegeLogic>();
- services.AddLogging();
- return services;
- }
- public static void Configure(ref IServiceCollection services, IList<string> interfaceDlls, IList<string> interfaceNamespaces, IList<string> serviceDlls)
- {
- string path = Thread.GetDomain().BaseDirectory;
- if (path.LastIndexOf("Debug", StringComparison.Ordinal) != -1)
- {
- path = path.TrimEnd(@"\Debug".ToCharArray());
- }
- else
- {
- path += "bin";
- }
- IList<FileInfo> interfaceFiles = new List<FileInfo>();
- foreach(var item in interfaceDlls)
- {
- var file = new FileInfo($"{path}\\{item}");
- interfaceFiles.Add(file);
- }
- var baseInterface = typeof(IDependency);
- var interfaceAssemblies = interfaceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList();
- List<Type> itfs = new List<Type>();
- foreach(var item in interfaceAssemblies)
- {
- var tp1 = item.GetTypes().Where(x => x.IsInterface&&interfaceNamespaces.Contains(x.Namespace)).ToList();
- itfs.AddRange(tp1);
- }
- IList<FileInfo> serviceFiles = new List<FileInfo>();
- foreach(var item in serviceDlls)
- {
- var file = new FileInfo($"{path}\\{item}");
- serviceFiles.Add(file);
- }
- var servicesAssemblies = serviceFiles.Select(x => Assembly.LoadFrom(x.FullName)).ToList();
- List<Type> serviceTypes = new List<Type>();
- foreach(var item in servicesAssemblies)
- {
- var tp = item.GetTypes().Where(x => x.IsClass);
- serviceTypes.AddRange(tp);
- }
- foreach(var item in itfs)
- {
- var serviceType = serviceTypes.Where(x => x.GetInterfaces().Contains(item)).FirstOrDefault();
- services.AddTransient(item, serviceType);
- //services.AddTransient<item,serviceType>
- }
- //Assembly[] assemblies = new DirectoryInfo(path).GetFiles("CZ*.*.dll", SearchOption.AllDirectories)
- // .Select(x => Assembly.LoadFrom(x.FullName)).ToArray();
- }
- }
- }
|