SqlSugar.IOC/依赖注入


1、Net IOC

优点:.net core 自带用起来比较方便,缺点像winform等就不太方便使用

1、注入ISqlSugarClient

.NET自带的IOC使用也很方便 

注意:

SqlSugarScope用单例AddSingleton  单例

SqlSugarClientAddScoped  每次请求一个实例

2选1只能用一种方式

//建一个扩展类
public static class SqlsugarSetup
{
    public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, 
    string dbName = "db_master")
    {
        SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
        {
            DbType = SqlSugar.DbType.MySql,
            ConnectionString = configuration.GetConnectionString(dbName),
            IsAutoCloseConnection = true,
        },
            db =>
            {
                //单例参数配置,所有上下文生效
                db.Aop.OnLogExecuting = (sql, pars) =>
                {
                    //Console.WriteLine(sql);//输出sql
                };
                
                //技巧:拿到非ORM注入对象
                //services.GetService<注入对象>();
            });
        services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton
    }
}
//Startup.cs文件添加下面代码
services.AddSqlsugarSetup(Configuration);

//业务类 和仓储不能用单例

源码用例: https://github.com/hailang2ll/SqlSugar.Template

2、使用ISqlSugarClient

注入我们都是用的 ISqlSugarClient,ISqlSugarClient 只有单库的所有操作并没租户功能, 原因如下:

SqlSugarClient : ISqlSugarClient, ITenant
SqlSugarScope  : ISqlSugarClient, ITenant

所以我ISqlSugarClient缺失了租户接口的方法,我们如果要用租户方法代码如下:

    /// <summary>
    /// 
    /// </summary>
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {

        ISqlSugarClient db;
        public WeatherForecastController(ISqlSugarClient db) 
        {
            this.db = db;//通过构造函数拿到注入的db
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IEnumerable<WeatherForecast>> GetAsync()
        {
            //如果要使用租户下面的方法 按下面转一下就可以用了
            //db.AsTenant().BeginTran();
            //db.AsTenant().GetConnection("db1")
            //老版本 (db as ITenant).BeginTran()
            //如果你直接转换也可以   db as SqlSugarClient , db as SqlSugarScope
            //使用db查询
            var list = await db.Queryable<WeatherForecast>().ToListAsync();
            return list;
        }
    }

3、基类仓储中IOC注入

因为继承在基类所以需要这样传

    public class UserRepository: Repository<Users>, IUserRepository
    {
        public UserRepository(SqlSugar.ISqlSugarClient db) : base(db) { }
        
        public async Task<Users> GetUserById(int userId)
        {
            try
            {
               return await GetFirstAsync(x => x.UserId == userId);
              
            }
            catch (Exception ex)
            {

                throw;
            }
        }
    }


2、SqlSugar.IOC

优点:适合自带的IOC不能用的情况下使用,比如WinFrom等会比较方便

安装: SqlSugar.Ioc & SqlSugarCore

 .NET Core 3.0+  .NET 5

 // 10秒入门
 SugarIocServices.AddSqlSugar(new IocConfig()
 {
    //ConfigId="db01"  多租户用到
   ConnectionString = "server=.;uid=sa;pwd=sasa;database=SQLSUGAR4XTEST",
   DbType = IocDbType.SqlServer,
   IsAutoCloseConnection = true//自动释放
 }); //多个库就传List<IocConfig>
 
 //配置参数
 SugarIocServices.ConfigurationSugar(db =>
 {
     db.Aop.OnLogExecuting = (sql, p) =>
     {
       Console.WriteLine(sql);
     };
     //设置更多连接参数
     //db.CurrentConnectionConfig.XXXX=XXXX
     //db.CurrentConnectionConfig.MoreSettings=new ConnMoreSettings(){}
     //二级缓存设置
     //db.CurrentConnectionConfig.ConfigureExternalServices = new ConfigureExternalServices()
      //{
         // DataInfoCacheService = myCache //配置我们创建的缓存类
       //}
     //读写分离设置
     //laveConnectionConfigs = new List<SlaveConnectionConfig>(){...}
     
     /*多租户注意*/
     //单库是db.CurrentConnectionConfig 
     //多租户需要db.GetConnection(configId).CurrentConnectionConfig 
  });
 
 
//注入后就能所有地方使用
DbScoped.SugarScope.Queryable<UserOrgMapping>().Where(it=>it.Id>0).ToList() //1.7版本支持
DbScoped.Sugar.Queryable<UserOrgMapping>().Where(it=>it.Id>0).ToList()

//DbScoped.SugarScope=SqlSugarScope (推荐)
//DbScoped.Sugar=SqlSugarClient


详细文档入口:SqlSugar.IOC使用--文档园 (donet5.com)



文档:SqlSugar5.0