[英]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.