You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serenity .NET 5中如何在辅助类中获取ISqlConnections的静态实例?

在Serenity .NET 5中获取ISqlConnections实例实现动态连接字符串

在Serenity .NET 5里,静态SqlConnections确实被ISqlConnections抽象取代了,目的就是为了支持多租户这类需要动态连接字符串的场景。要在辅助类里实现类似原来的功能,有两种常用方式,我给你详细说下:

推荐方式:构造函数注入ISqlConnections

这是Serenity .NET 5推荐的做法,完全符合依赖注入的设计原则,也方便后续的测试和维护。你只需要把ISqlConnections通过构造函数注入到你的辅助类中就行:

public class LoginLogHelper
{
    private readonly ISqlConnections _sqlConnections;

    // 构造函数注入ISqlConnections实例
    public LoginLogHelper(ISqlConnections sqlConnections)
    {
        _sqlConnections = sqlConnections;
    }

    public bool SaveLoginLog(LoginLogRow logRow)
    {
        using (var connection = _sqlConnections.NewFor<LoginLogRow>())
        {
            // 在这里执行你的日志保存逻辑,比如插入操作
            connection.Insert(logRow);
            return true;
        }
    }
}

这种方式的好处是,Serenity会自动处理当前请求的上下文(比如租户信息),ISqlConnections会返回对应租户的数据库连接,完全不需要你手动处理动态连接字符串的切换。

兼容旧代码:使用Dependency.Resolve获取实例

如果你的辅助类是静态的,或者不想大改现有结构,也可以用Serenity提供的服务定位器来获取ISqlConnections实例:

public static class LoginLogHelper
{
    public static bool SaveLoginLog(LoginLogRow logRow)
    {
        // 从依赖容器中解析ISqlConnections实例
        var sqlConnections = Dependency.Resolve<ISqlConnections>();
        using (var connection = sqlConnections.NewFor<LoginLogRow>())
        {
            // 执行保存逻辑
            connection.Insert(logRow);
            return true;
        }
    }
}

不过要注意,这种方式虽然能快速解决问题,但不如构造注入优雅,而且在编写单元测试时需要额外配置依赖容器,所以还是优先推荐构造注入的方式。

内容的提问来源于stack exchange,提问作者rahulchawla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:53:09