using Autofac;
using Microsoft.Extensions.DependencyModel;
using System.Linq;
using System.Reflection;
using ZhonTai.Admin.Core.Attributes;
using ZhonTai.Admin.Core.Configs;
using Module = Autofac.Module;
namespace ZhonTai.Admin.Core.RegisterModules;
public class SingleInstanceModule : Module
{
private readonly AppConfig _appConfig;
///
/// 单例注入
///
/// AppConfig
public SingleInstanceModule(AppConfig appConfig)
{
_appConfig = appConfig;
}
protected override void Load(ContainerBuilder builder)
{
// 获得要注入的程序集
Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
.Where(a => _appConfig.AssemblyNames.Contains(a.Name) || a.Name == "ZhonTai.Admin")
.Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
//无接口注入单例
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.GetCustomAttribute() != null)
.SingleInstance()
.PropertiesAutowired();
//有接口注入单例
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.GetCustomAttribute() != null)
.AsImplementedInterfaces()
.SingleInstance()
.PropertiesAutowired();
}
}