我想通过存储库从Startup.cs文件中的数据库中获取值。但是,该服务无法解决。
我了解我需要创建我的存储库的一个实例,然后访问它。我曾经问过类似的问题,但我不想创建新服务:.NET Core 2 - Call Repository method from Startup
在我的Startup.cs中,我有以下内容:
public Startup(IConfiguration configuration, IRepository repo)
{
Configuration = configuration;
Repo = repo;
}
public IRepo Repo { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IRepository, Repository>();
var data = Repo.GetValue();
}
尽管运行此命令时出现错误,但无法解决该服务。
答案 0 :(得分:2)
您不能只在Startup
构造函数中注入任何您喜欢的东西。允许使用IConfiguration
,IHostingEnvironment
之类的一些东西,但这是因为这些服务在启动管道的早期很早就注册了。在这里,您尝试注入直到以后才定义为服务的内容。 (必须先构造Startup
,然后才能调用ConfigureServices
。)
尚不清楚您的最终目标是什么(即您要使用数据做什么)。但是,一般来说,您应该在Program.cs
中而不是Startup.cs
中添加应该在启动时运行的代码。喜欢:
public static void Main(string[] args)
{
var host = BuildWebHost(args);
// do something
host.Run();
}
一旦有了主机,就可以从中拉出服务:
var repo = host.Services.GetRequiredService<IRepository>();
var data = repo.GetValue();
如果您需要执行异步操作,则需要使用异步Main,然后等待host.RunAsync()
:
public static async Task Main(string[] args)
{
var host = BuildWebHost(args);
// do something async
await host.RunAsync();
}