[小菜一碟] ASP.NET Core 2.2 及 3.1 將 DI Container 替換為 Autofac 的設定方式

ASP.NET Core 內建的 DI Container 稍嫌陽春了一點,讓我懷念起 Autofac 提供的多種花式註冊方式,我決定把它召喚回來攜手共創未來,ASP.NET Core 2.2 到 3.1 有一些 Breaking Changes,設定方式會有一點不一樣,這邊做個記錄。

首先,專案必須先安裝 Autofac.Extensions.DependencyInjection 這個套件。

ASP.NET Core 2.2 use Autofac

Program.cs 加入這一行程式碼

ConfigureServices(services => services.AddAutofac())

接著要去 Startup.cs 修改 ConfigureServices() 方法的回傳值為 IServiceProvider 型別。

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    ...
}

最後,將註冊元件的程式寫在 ConfigureServices() 方法裡面,最重要的是 builder.Populate(services); 這行程式碼,讓 Autofac 可以解析原本註冊到 IServiceCollection 的服務,就大功告成了。

ASP.NET Core 3.1 use Autofac

ASP.NET Core 3.1 設定 Autofac 變得簡單一點了,先在 Program.cs 加入下面這一行程式碼。

UseServiceProviderFactory(new AutofacServiceProviderFactory())

最後,在 Startup.cs 加上一個公開的 ConfigureContainer() 方法,將註冊元件的程式碼寫在裡面就完成了。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學