You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
4.3 KiB
C#
106 lines
4.3 KiB
C#
using System.Reflection;
|
|
using System.Runtime.Loader;
|
|
using Autofac;
|
|
using Autofac.Extras.Quartz;
|
|
using ce.autofac.extension;
|
|
using Infrastructure.Cache;
|
|
using Infrastructure.Extensions.AutofacManager;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.DependencyModel;
|
|
using OpenAuth.App.Interface;
|
|
using OpenAuth.App.ServiceApp;
|
|
using OpenAuth.App.SSO;
|
|
using OpenAuth.Repository;
|
|
using SqlSugar;
|
|
|
|
namespace OpenAuth.App
|
|
{
|
|
public static class AutofacExt
|
|
{
|
|
public static void InitAutofac(ContainerBuilder builder)
|
|
{
|
|
//注册数据库基础操作和工作单元
|
|
builder.RegisterGeneric(typeof(SugarRepositiry<>)).As(typeof(ISimpleClient<>)).InstancePerLifetimeScope();
|
|
//builder.RegisterGeneric(typeof(SimpleClient<>)).As(typeof(ISimpleClient<>)).InstancePerLifetimeScope();
|
|
//builder.RegisterGeneric(typeof(SugarRepositiry<>)).As(typeof(ISugarRepositiry<>)).InstancePerLifetimeScope();
|
|
//builder.RegisterGeneric(typeof(SugarUnitOfWork<>)).As(typeof(ISugarUnitOfWork<>)).InstancePerLifetimeScope();
|
|
|
|
//注入授权
|
|
builder.RegisterType(typeof(LocalAuth)).As(typeof(IAuth)).InstancePerLifetimeScope();
|
|
|
|
//注册app层
|
|
builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).InstancePerLifetimeScope();
|
|
//builder.RegisterType(typeof(TestApp)).InstancePerLifetimeScope();
|
|
|
|
builder.RegisterType(typeof(RedisCacheContext)).As(typeof(ICacheContext)).InstancePerLifetimeScope();
|
|
//builder.RegisterType(typeof(CacheContext)).As(typeof(ICacheContext));
|
|
builder.RegisterType(typeof(HttpContextAccessor)).As(typeof(IHttpContextAccessor))
|
|
.InstancePerLifetimeScope();
|
|
try
|
|
{
|
|
foreach (Assembly assembly in ce.autofac.extension.Extensions.GetAssemblies())
|
|
{
|
|
foreach (Type type in assembly.GetTypes().Where((Func<Type, bool>)(t =>
|
|
typeof(IBLL).IsAssignableFrom(t) &&
|
|
t.GetCustomAttribute<BLLNameAttribute>() != null)))
|
|
{
|
|
BLLNameAttribute customAttribute = type.GetCustomAttribute<BLLNameAttribute>();
|
|
Type serviceType =
|
|
type.GetInterfaces().FirstOrDefault(
|
|
(Func<Type, bool>)(t => typeof(IBLL).IsAssignableFrom(t)));
|
|
if (serviceType != null)
|
|
{
|
|
builder.RegisterType(type).AsImplementedInterfaces()
|
|
.Named(customAttribute.BLLName, serviceType);
|
|
builder.RegisterType(type).Named(customAttribute.BLLName, type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e);
|
|
throw;
|
|
}
|
|
|
|
InitDependency(builder);
|
|
|
|
builder.RegisterModule(new QuartzAutofacFactoryModule());
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 注入所有继承了IDependency接口
|
|
/// </summary>
|
|
/// <param name="builder"></param>
|
|
private static void InitDependency(ContainerBuilder builder)
|
|
{
|
|
Type baseType = typeof(IDependency);
|
|
var compilationLibrary = DependencyContext.Default
|
|
.CompileLibraries
|
|
.Where(x => !x.Serviceable
|
|
&& x.Type == "project")
|
|
.ToList();
|
|
var count1 = compilationLibrary.Count;
|
|
List<Assembly> assemblyList = new List<Assembly>();
|
|
|
|
foreach (var _compilation in compilationLibrary)
|
|
{
|
|
try
|
|
{
|
|
assemblyList.Add(
|
|
AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(_compilation.Name)));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine(_compilation.Name + ex.Message);
|
|
}
|
|
}
|
|
|
|
builder.RegisterAssemblyTypes(assemblyList.ToArray())
|
|
.Where(type => baseType.IsAssignableFrom(type) && !type.IsAbstract)
|
|
.AsSelf().AsImplementedInterfaces()
|
|
.InstancePerLifetimeScope();
|
|
}
|
|
}
|
|
} |