如何调用 Startup.cs 中的存储库?
How can I call a repository in Startup.cs?
我想通过存储库从我的 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();
}
当我 运行 虽然我收到无法解析服务的错误。
您不能只在 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();
}
我想通过存储库从我的 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();
}
当我 运行 虽然我收到无法解析服务的错误。
您不能只在 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();
}