using Admin.Core.Common.Attributes;
using Autofac;
using Microsoft.Extensions.DependencyModel;
using System.Linq;
using System.Reflection;
using Module = Autofac.Module;
namespace Admin.Core.RegisterModules
{
public class SingleInstanceModule : Module
{
private readonly string _prefixName;
///
/// 单例注入
///
/// 前缀名
public SingleInstanceModule(string prefixName = "Admin.")
{
_prefixName = prefixName;
}
protected override void Load(ContainerBuilder builder)
{
//无接口注入单例
Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries.Where(a => a.Name.StartsWith(_prefixName)).Select(o => Assembly.Load(new AssemblyName(o.Name))).ToArray();
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.GetCustomAttribute() != null)
.SingleInstance();
//有接口注入单例
builder.RegisterAssemblyTypes(assemblies)
.Where(t => t.GetCustomAttribute() != null)
.AsImplementedInterfaces()
.SingleInstance();
}
}
}