我正在构建.net core 3.1 Web应用程序,并且正在尝试内置的依赖项注入。
我想根据运行应用程序的运行时环境注入其他服务,我认为我可以使用属性来定义该服务是否适合该环境,例如:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddTransient<IOperation, OperationDevelopment>();
services.AddTransient<IOperation, OperationStaging>();
services.AddTransient<IOperation, OperationProduction>();
...
}
public interface IOperation
{
Guid OperationId { get; }
}
[Development]
public class OperationDevelopment : IOperation
{
}
[Staging]
public class OperationStaging : IOperation
{
}
[Production]
public class OperationProduction : IOperation
{
}
我该怎么办,跳过注册?全部注册,然后解决合适的服务?我错过了什么?
如果.net核心DI太基础,我应该使用什么?
谢谢
您可以在方法内部使用简单的方法吗?希望对您有所帮助
if (Environment.IsDevelopment())
{
services.AddTransient<IOperation, OperationDevelopment>();
}
else
{
services.AddTransient<IOperation, OperationProduction>();
}
假设在您的appsettings.json中,如果您已经像这样配置了环境变量
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
然后在startup.cs中,捕获环境变量值
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment environment)
{
Configuration = configuration;
Environment = environment;
}
public IConfiguration Configuration { get; }
public IWebHostEnvironment Environment { get; }
在configureServices捕获主机环境配置中
public void ConfigureServices(IServiceCollection services)
{
string currentEnvironment= Environment.EnvironmentName;
if(currentEnvironment== "Development")
{
services.AddTransient<IOperation, OperationDevelopment>();
}
else if (currentEnvironment == "Staging")
{
services.AddTransient<IOperation, OperationStaging>();
}
else if (currentEnvironment == "Production")
{
services.AddTransient<IOperation, OperationProduction>();
}
}
IWebHostEnvironment适用于.netcore 3.0(IHostEnvironment适用于.net core 2.2)