当前位置: 首页 > 知识库问答 >
问题:

我如何在Startup.cs?调用存储库[复制]

师承弼
2023-03-14

我想在启动时从数据库中获取一个值。通过存储库访问cs文件。然而,该服务无法解决。

我知道我需要创建存储库的一个实例,然后访问它。我看到有人问过类似的问题,但我不想创建新服务:。NET Core 2-从启动时调用存储库方法

在我的创业公司。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个答案

谭浩皛
2023-03-14

你不能只在启动构造函数中注入你喜欢的任何东西。有一些事情是允许的,比如IConfigurationIHostingEnvironment,等等。但这是因为这些服务在启动管道中很早就注册了。在这里,您试图注入一些直到后来才定义为服务的东西。(Startup必须先构造,然后才能对其调用ConfigureServices。)

目前尚不清楚您的最终目标是什么(即您试图对数据做什么)。然而,一般来说,您应该在程序中添加应该在启动时运行的代码。cs实际上不是启动。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,并等待主机。代码:

public static async Task Main(string[] args)
{
    var host = BuildWebHost(args);

    // do something async

    await host.RunAsync();
}
 类似资料:
  • 出于个人原因,对于同一个实体,我有多个存储库,其中我有多个需要的本机命名查询,我的第一个想法是将查询代码从一个实体移动到另一个存储库,这样当我想要编辑查询时,我会在存储库中找到它,而不是实体(以避免一个大的实体代码充满查询)。 所以我尝试了这个实现。 这是我的存储库: 接下来是我的实体: 启动时,我确实会遇到以下异常: org.springframework.beans.factory.BeanC

  • 问题内容: 我们如何使用Hibernate或JPA调用存储过程? 问题答案: 您可以执行以下操作 请在需要的地方添加异常处理。

  • 问题内容: 我有一个存储过程,大约需要2-3分钟才能完成其执行。从ado.net我想使存储过程的执行在后台发生。一旦我向存储过程发出请求,我就必须返回到我的代码。谁可以帮我这个事 ? 问题答案: 您应该研究Threading。简而言之,您可以通过调用存储过程来创建线程。当您启动线程时,它将在beackground中运行。该线程可以具有在该线程完成时调用的回调函数。 BackgroundWorker

  • 问题内容: 我正在Eclipse中进行Java项目。我创建了一个名为“ Spring”的用户库,并向其中添加了所有的Spring jar。我的问题是,Eclipse在哪里存储该库?是否将所有jar文件复制到磁盘上某个新目录中?还是在某些配置文件中维护有关哪些jar属于用户库的信息? 问题答案: Eclipse不会复制用户库的任何内容,它只是具有特定于机器的绝对路径的容器。用户库定义存储在工作空间中

  • 它们都存储3000.0,但我想为我的junit测试存储3000.00。不知道怎么做。