如何在asp.net核心中配置依赖项

问题描述 投票:0回答:1

我有ASP.Net Core 2.1个应用程序。

我需要注册并注入AWS的少量依赖项>

当前,实现如下所示

public abstract class BaseService
{

    protected readonly IConfiguration _configuration;
    protected readonly RegionEndpoint _region;
    protected readonly IAmazonDynamoDB _dynamoClient;
    protected  IPocoDynamo _pocoDynamo;


    public BaseService(IConfiguration configuration)
    {
        _configuration = configuration;
        var awsSettings = configuration.GetSection("AWS");
        _dynamoClient = SetDynamoClient(awsSettings);
        _pocoDynamo = SetPocoDynamoClient();
    }

    protected IAmazonDynamoDB SetDynamoClient(IConfigurationSection configuration)
    {
        AWSCredentials credentials = new BasicAWSCredentials(configuration["AccessKey"], configuration["AccessSecret"]);
        return new AmazonDynamoDBClient(credentials, _region);
    }

    protected IPocoDynamo SetPocoDynamoClient()
    {
        return new PocoDynamo(_dynamoClient);
    }

}

由于进行单元测试,因此无法模拟AWS服务。

我想在Startup.csConfigureServices()中注册所有这些依赖项>

这是我正在尝试的

public void ConfigureServices(IServiceCollection services)
    {
        AWSCredentials credentials = new BasicAWSCredentials(configuration["AccessKey"], configuration["AccessSecret"]);
        services.AddTransient(IAmazonDynamoDB, (a) =>
         {
             return new AmazonDynamoDBClient(credentials, RegionEndpoint.GetBySystemName(""))

         });
        //here I need to pass the IAmazonDynamoDB to below IOC
        //services.AddSingleton<IPocoDynamo,new PocoDynamo()> ();
        return services;
    }

但是这会引发错误

错误CS0119'IAmazonDynamoDB'是一种类型,在给定的上下文中无效

如何根据需要在此处配置依赖项?

谢谢!

我有ASP.Net Core 2.1应用程序。我需要注册并注入一些AWS依赖项目前,该实现如下所示,是公共抽象类BaseService {protected ...

c# dependency-injection inversion-of-control ioc-container asp.net-core-2.1
1个回答
0
投票

使用工厂代表呼叫注册的服务

public void ConfigureServices(IServiceCollection services) {
    AWSCredentials credentials = new BasicAWSCredentials(configuration["AccessKey"], configuration["AccessSecret"]);
    services.AddTransient<IAmazonDynamoDB>(sp => 
        new AmazonDynamoDBClient(credentials, RegionEndpoint.GetBySystemName(""))
    );

    //here pass the IAmazonDynamoDB to below IOC
    services.AddSingleton<IPocoDynamo>(sp => 
        new PocoDynamo(sp.GetRequieredService<IAmazonDynamoDB>())
    );


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