依赖关系注入:根据环境调用不同的服务

问题描述 投票:2回答:2

我正在构建.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太基础,我应该使用什么?

谢谢

c# .net-core inversion-of-control
2个回答
2
投票

您可以在方法内部使用简单的方法吗?希望对您有所帮助

if (Environment.IsDevelopment())
{ 
    services.AddTransient<IOperation, OperationDevelopment>();
}
else
{
    services.AddTransient<IOperation, OperationProduction>();
}

1
投票

假设在您的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)

© www.soinside.com 2019 - 2024. All rights reserved.