using Autofac; using FreeSql; using System; using System.Collections.Generic; using System.Collections.Concurrent; using System.Linq.Expressions; using System.Reflection; using System.Linq; public static class FreeSqlRepositoryAutofacExtenssions { /// /// 注册 FreeSql.Repository 包括 泛型、继承实现的仓储 /// /// /// 全局过滤设置 /// 继承实现的仓储,所在的程序集 public static void RegisterFreeRepository(this ContainerBuilder builder, Action globalDataFilter = null, params Assembly[] assemblies) => RegisterFreeRepositoryPrivate(builder, globalDataFilter, assemblies); static void RegisterFreeRepositoryPrivate(ContainerBuilder builder, Action globalDataFilter, params Assembly[] assemblies) { Utils._globalDataFilter = globalDataFilter; builder.RegisterGeneric(typeof(GuidRepository<>)).As( typeof(GuidRepository<>), typeof(BaseRepository<>), typeof(IBasicRepository<>), typeof(IReadOnlyRepository<>) ).OnActivating(a => { //Utils.SetRepositoryDataFilter(a.Instance); }).InstancePerDependency(); builder.RegisterGeneric(typeof(DefaultRepository<,>)).As( typeof(DefaultRepository<,>), typeof(BaseRepository<,>), typeof(IBasicRepository<,>), typeof(IReadOnlyRepository<,>) ).OnActivating(a => { //Utils.SetRepositoryDataFilter(a.Instance); }).InstancePerDependency(); builder.RegisterAssemblyTypes(assemblies).Where(a => { return typeof(IRepository).IsAssignableFrom(a); }).InstancePerDependency(); } }