【问题标题】:How can I call a repository in Startup.cs? [duplicate]如何在 Startup.cs 中调用存储库? [复制]
【发布时间】:2019-12-21 11:00:15
【问题描述】:

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

当我运行此程序时,我收到了无法解析服务的错误。

【问题讨论】:

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


    【解决方案1】:

    你不能只在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();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2021-09-10
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多