我注意到ASPNETCORE\u环境有一种奇怪的行为
- 当我将其设置为
Development
时,由于某些服务的生命周期不正确(akacannot consume scoped service...
),我的应用程序会失败(应该如此) - 当我将其设置为
Local
时(我们使用Local
进行本地开发;我们使用Development
进行前端工作的开发环境),应用程序工作正常,没有抛出错误,范围服务由单例服务使用...
有没有办法在Local
和其他环境中保持Development
人的行为?问题是,我完全没有意识到我在推送无效代码(交叉判断数十个服务不是一件容易的任务-这就是为什么我假设它是由我的应用程序在本地完成的).
此外,我试图确定实现这额外Development
个特定逻辑的线路,但没有成功.也许这里有人知道这个地方——我真的很想花点时间读一下代码.
我创建了一个最小的可复制示例:
程序反恐精英
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using WebApplication1;
var builder = Host.CreateDefaultBuilder(args)
.ConfigureHostConfiguration(configHost =>
{
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
builder.Build().Run();
启动.反恐精英
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using WebApplication1.Services;
namespace WebApplication1
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddControllers();
services
.AddSingleton<单一服务>()
.AddScoped<ScopedService>();
}
public void Configure(IApplicationBuilder app)
{
app
.UseRouting();
app.ApplicationServices
.GetService<单一服务>()
.DoSth();
}
}
}
单一服务
using System;
namespace WebApplication1.Services;
public class 单一服务
{
private readonly ScopedService _scopedService;
public 单一服务(ScopedService scopedService)
{
_scopedService = scopedService;
}
public void DoSth()
{
Console.WriteLine($"{nameof(单一服务)} - {nameof(DoSth)}");
_scopedService.DoSth();
}
}
ScopedService.恩
using System;
namespace WebApplication1.Services;
public class ScopedService
{
public void DoSth()
{
Console.WriteLine($"{nameof(ScopedService)} - {nameof(DoSth)}");
}
}
启动设置.jsone公司
{
"profiles": {
"WebApplication1": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:8080",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}