[C#] .net framework 使用 Autofac 註冊多組資料庫連線


Posted by mike-hsieh on 2023-11-14

目前礙於環境,沒有使用 .net core 開發,使用 .net framework 4.6,所以在一些容器化的配置上就要自己手動建置,也記錄一下當遇到多組連線字串要設定時的幾個解決方式。

以下提供兩種方法,第一種是最基本的自定義連線的字串名稱,第二種是使用介面繼承,會推薦第二種,詳見如下。

方法一: 自定義連線的字串名稱
var builder = new ContainerBuilder();

// 定義連線字符串
string connectionString1 = "...";
string connectionString2 = "...";

// 註冊不同的SqlConnection實例
builder.Register(c => new SqlConnection(connectionString1))
       .Named<IDbConnection>("DBConnection1")
       .InstancePerLifetimeScope();

builder.Register(c => new SqlConnection(connectionString2))
       .Named<IDbConnection>("DBConnection2")
       .InstancePerLifetimeScope();

// ...其他註冊

// 現在在需要使用這些連線的地方,您可以使用ResolveNamed來獲取正確的實例
public class YourService
{
    private readonly IDbConnection _connection1;
    private readonly IDbConnection _connection2;

    public YourService(IComponentContext context)
    {
        _connection1 = context.ResolveNamed<IDbConnection>("DBConnection1");
        _connection2 = context.ResolveNamed<IDbConnection>("DBConnection2");
    }

    // 使用 _connection1 和 _connection2...
}
方法二: 使用介面繼承
public interface IFirstDbConnection : IDbConnection { }
public interface ISecondDbConnection : IDbConnection { }

var builder = new ContainerBuilder();

// 註冊第一個數據庫連線
builder.Register(c => new SqlConnection("FirstConnectionString"))
       .As<IFirstDbConnection>()
       .InstancePerLifetimeScope();

// 註冊第二個數據庫連線
builder.Register(c => new SqlConnection("SecondConnectionString"))
       .As<ISecondDbConnection>()
       .InstancePerLifetimeScope();

// 使用時
public class YourService
{
    private readonly IFirstDbConnection _firstConnection;
    private readonly ISecondDbConnection _secondConnection;

    public YourService(IFirstDbConnection firstConnection, ISecondDbConnection secondConnection)
    {
        _firstConnection = firstConnection;
        _secondConnection = secondConnection;
    }

    // 使用 _firstConnection 和 _secondConnection...
}

使用繼承 IDbConnection 創建特定的介面為每個數據庫連線提供一個清晰和專門的抽象,這是一種很好的做法。
這種方法提供了以下幾種優點:

  1. 更高的靈活性,使您能夠在不同的數據庫之間更清楚地區分。
  2. 同時還允許您在未來更容易地進行變更或擴展。
  3. 此外,它避免了使用字符串來解析依賴項,這可以減少錯誤並提高代碼的可讀性和安全性。

#multi-db-connection #.net framework4.6 #autofac #regist-multi-db-connection







Related Posts

[Py 百日馬 Day 3] 用 if / elif / else 見機行事

[Py 百日馬 Day 3] 用 if / elif / else 見機行事

C語言-loop應用 & 常用函式

C語言-loop應用 & 常用函式

【CSS】- Box Modal(盒模型)

【CSS】- Box Modal(盒模型)


Comments