Mat*_*eri 7 c# dependency-injection console-application .net-core
我必须使用控制台应用程序将数据添加到我的数据库.在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));
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我添加了使用数据库的功能,并使其像Web Api应用程序一样,并将我的DbContext添加到构造函数中:
public AutoGetCurrency(CurrencyDbContext db) => this.db = new CurrencyDbContext();
Run Code Online (Sandbox Code Playgroud)
这会出现以下错误:
你调用的对象是空的
我试图添加一个没有参数的默认构造函数,它仍然给出相同的错误.
请告诉我如何在.Net核心控制台应用程序中使用DI?
Nko*_*osi 12
在构建提供者之前向集合添加服务.在您的示例中,您在构建提供程序后添加服务.对集合所做的任何修改一旦构建就不会对提供者产生任何影响.
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();
Run Code Online (Sandbox Code Playgroud)
同样在提供的构造函数示例中,您仍在初始化db.
public AutoGetCurrency(CurrencyDbContext db) => this.db = new CurrencyDbContext();
Run Code Online (Sandbox Code Playgroud)
注入的数据库未被使用.您需要将注入的值传递给本地字段.
public AutoGetCurrency(CurrencyDbContext db) => this.db = db;
Run Code Online (Sandbox Code Playgroud)
正确配置后,您可以通过提供程序解析类,并让提供程序在解析所请求的服务时创建并注入任何必要的依赖项.
var currency = serviceProvider.GetService<AutoGetCurrency>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8913 次 |
| 最近记录: |