通八洲科技

Dapper怎么与依赖注入容器(如Autofac)集成 Dapper高级DI配置

日期:2026-01-01 00:00 / 作者:月夜之吻
Dapper与Autofac集成的关键是正确注册IDbConnection工厂和仓储类并管理其生命周期。需用InstancePerLifetimeScope注册连接工厂避免线程安全问题,仓储类构造注入IDbConnection,事务场景共享同一连接和事务,多数据库支持通过IDbProvider抽象动态注册。

Dapper 本身是个轻量级的 SQL 映射工具,不内置依赖注入能力,所以要和 Autofac 这类容器集成,关键不是“让 Dapper 支持 DI”,而是把 Dapper 依赖的核心对象(如 IDbConnection)和仓储类(Repository)注册进容器,并控制其生命周期。高级配置的核心在于连接管理、作用域隔离和线程安全,而不是强行包装 Dapper。

注册 IDbConnection 实例(按请求作用域)

Dapper 操作依赖 IDbConnection,但直接注册 SqlConnection 会出问题——它不是线程安全的,也不能跨请求复用。正确做法是注册一个工厂或委托,在每次需要时创建新连接:

仓储类注册与构造注入

仓储类(如 ProductRepository)应只依赖 IDbConnection,不要自己 new 连接:

处理事务与共享连接(高级场景)

当多个仓储需参与同一事务时,不能各自 new 连接——必须共享同一个打开的连接和 Transaction:

数据库类型切换与多实例支持

如果项目要兼容 SQL Server、MySQL、PostgreSQL 等多种数据库,别硬编码 SqlConnection:

基本上就这些。Dapper 的 DI 集成不复杂但容易忽略连接生命周期,核心就三点:连接不复用、仓储随作用域、事务靠共享。只要连接管好了,Dapper 就能稳稳跑在 Autofac 之上。