我必须使用控制台应用程序将数据添加到我的数据库中。在 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 core 控制台应用程序中使用 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>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)