#if netcoreapp
using FreeSql;
using System;
using System.Linq;
using System.Reflection;
namespace Microsoft.Extensions.DependencyInjection
{
    public static class FreeSqlRepositoryDependencyInjection
    {
        /// 
        /// 批量注入 Repository,可以参考代码自行调整
        /// 
        /// 
        /// 
        /// 
        /// 
        public static IServiceCollection AddFreeRepository(this IServiceCollection services, Action globalDataFilter = null, params Assembly[] assemblies)
        {
            if (globalDataFilter != null)
            {
                DataFilterUtil._globalDataFilter = globalDataFilter;
                //如果看到了这里的代码,想自己调整,但因为 _globalDataFilter 是内部属性,无法修改?
                //请考虑改用 fsql.GlobalFilter.Apply
            }
            services.AddScoped(typeof(IBaseRepository<>), typeof(GuidRepository<>));
            services.AddScoped(typeof(BaseRepository<>), typeof(GuidRepository<>));
            services.AddScoped(typeof(IBaseRepository<,>), typeof(DefaultRepository<,>));
            services.AddScoped(typeof(BaseRepository<,>), typeof(DefaultRepository<,>));
            if (assemblies?.Any() == true)
                foreach (var asse in assemblies)
                    foreach (var repo in asse.GetTypes().Where(a => a.IsAbstract == false && typeof(IBaseRepository).IsAssignableFrom(a)))
                        services.AddScoped(repo);
            return services;
        }
    }
}
#endif