【发布时间】:2018-05-07 20:59:18
【问题描述】:
在 ASP.NET Core 2 应用程序中,我设置了一些服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MyContext")));
services.AddHangfire(options => options.UseSqlServerStorage(Configuration.GetConnectionString("MyContext")));
services.AddOptions();
services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
services.AddMvc().AddDataAnnotationsLocalization();
services.AddScoped<IMyContext, MyContext>();
services.AddTransient<IFileSystem, FileWrapper>();
services.AddTransient<Importer, Importer>();
}
在program.cs 中,我可以检索自己的服务:
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var ip = services.GetRequiredService<Importer>();
Task task = ip.ImportListAsync();
}
现在我试图了解当我没有主机变量时如何做同样的事情,就像在任何其他 C# 类中或者即使是 cshtml 页面一样:
public async Task<IActionResult> OnPostRefresh()
{
if (!ModelState.IsValid)
{
return Page();
}
// host is not defined: how to retrieve it?
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var ip = services.GetRequiredService<Importer>();
Task task = ip.ImportListAsync();
}
return RedirectToPage();
}
【问题讨论】:
-
什么是
hosts?您希望我们神奇地猜出您分配给变量的内容吗?另外,您是否阅读过 Microsoft 文档中的 DI 教程? -
阅读this basic tutorial 并在您无法继续时提出真正的问题。
-
我很抱歉。我在复制/粘贴中错过了一行。很抱歉。
-
我阅读了该文档,但我很困惑,因为他们在谈论视图和控制器 (MVC),但我没有使用 MVC,因此我认为它不适用于我的场景。我不确定我应该依赖哪些文档。
-
您的问题标题为“从 cshtml 检索服务”。 CSHTML => 剃刀 => 视图。如果您的问题标题提到 MVC,您为什么不使用 MVC?
标签: c# asp.net-core-2.0 razor-pages