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()
方法,將註冊元件的程式碼寫在裡面就完成了。