如何在Startup.cs中调用存储库?

时间:2019-08-14 21:26:03

标签: c# asp.net asp.net-core-2.2

我想通过存储库从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();
}

尽管运行此命令时出现错误,但无法解决该服务。

1 个答案:

答案 0 :(得分:2)

您不能只在Startup构造函数中注入任何您喜欢的东西。允许使用IConfigurationIHostingEnvironment之类的一些东西,但这是因为这些服务在启动管道的早期很早就注册了。在这里,您尝试注入直到以后才定义为服务的内容。 (必须先构造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();
}