簡體   English   中英

如何在 .Net core 控制台應用程序中使用依賴注入

[英]How to use Dependency Injection in .Net core Console Application

我必須使用控制台應用程序將數據添加到我的數據庫中。 在 Main() 方法中,我添加了:

var services = new ServiceCollection();
var serviceProvider = services.BuildServiceProvider();
var connection = @"Server = (localdb)\mssqllocaldb; Database = CryptoCurrency; Trusted_Connection = True; ConnectRetryCount = 0";
services.AddDbContext<CurrencyDbContext>(options => options.UseSqlServer(connection));

在另一個類中,我添加了使用數據庫的功能,並使它像一個 Web Api 應用程序,並將我的 DbContext 添加到構造函數中:

public AutoGetCurrency(CurrencyDbContext db) =>  this.db = new CurrencyDbContext();

這給出了以下錯誤:

未將對象引用設置為對象的實例

我試圖添加一個沒有參數的默認構造函數,它仍然給出相同的錯誤。

請告訴我如何在 .Net 核心控制台應用程序中使用 DI?

在構建提供程序之前將服務添加到集合。 在您的示例中,您是在已經構建了提供程序之后添加服務。 一旦構建,對集合所做的任何修改都不會對提供程序產生影響。

var services = new ServiceCollection();
var connection = @"Server = (localdb)\mssqllocaldb; Database = CryptoCurrency; Trusted_Connection = True; ConnectRetryCount = 0";
services.AddDbContext<CurrencyDbContext>(options => options.UseSqlServer(connection));
//...add any other services needed
services.AddTransient<AutoGetCurrency>();

//...

////then build provider 
var serviceProvider = services.BuildServiceProvider();

同樣在構造函數示例中,您仍在初始化數據庫。

public AutoGetCurrency(CurrencyDbContext db) =>  this.db = new CurrencyDbContext();

未使用注入的數據庫。 您需要將注入的值傳遞給本地字段。

public AutoGetCurrency(CurrencyDbContext db) =>  this.db = db;

正確配置后,您可以通過提供程序解析您的類,並在解析請求的服務時讓提供程序創建和注入任何必要的依賴項。

var currency = serviceProvider.GetService<AutoGetCurrency>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM