using System.Reflection;
|
using Autofac;
|
using Autofac.Core;
|
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyModel;
|
|
namespace KH.WMS.Core.DependencyInjection;
|
|
/// <summary>
|
/// 服务集合扩展方法
|
/// </summary>
|
public class ServiceExtensions : Autofac.Module
|
{
|
protected override void Load(ContainerBuilder builder)
|
{
|
List<Assembly> assemblies = GetReferencedAssemblies();
|
|
IServiceRegistrar registrar = new ServiceRegistrar();
|
registrar.Register(builder, assemblies.ToArray());
|
}
|
|
/// <summary>
|
/// 获取项目内的程序集
|
/// </summary>
|
/// <returns></returns>
|
private List<Assembly> GetReferencedAssemblies()
|
{
|
List<Assembly> assemblies = new();
|
string basePath = AppContext.BaseDirectory;
|
try
|
{
|
List<RuntimeLibrary> compilationLibraries = DependencyContext.Default.RuntimeLibraries.Where(x => x.Name.StartsWith("KH.WMS")).ToList();
|
foreach (var library in compilationLibraries)
|
{
|
try
|
{
|
string path = Path.Combine(basePath, $"{library.Name}.dll");
|
if (!File.Exists(path))
|
{
|
continue;
|
}
|
assemblies.Add(Assembly.LoadFrom(path));
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine(library.Name + ex.Message);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine($"错误: 获取程序集失败: {ex.Message}");
|
}
|
|
return assemblies;
|
}
|
}
|