首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在asp.net核心中配置依赖项

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

Stack Overflow用户
提问于 2019-09-27 11:30:51
回答 1查看 734关注 0票数 1

我有一个ASP.Net核心2.1应用程序。我需要注册&注入很少的AWS依赖项。

目前,实现方式如下:

代码语言:javascript
复制
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()中注册所有这些依赖项。

这就是我想要的:

代码语言:javascript
复制
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;
}

但这是抛出一个错误

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

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 11:43:38

使用工厂委托调用注册服务

代码语言:javascript
复制
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>(serviceProvider => {
        var pocoDynamo = new PocoDynamo(serviceProvider.GetRequieredService<IAmazonDynamoDB>());
        pocoDynamo.SomeMethod();
        return pocoDynamo;
    });
}

目标类不再需要依赖于IConfiguration,因为依赖项可以通过构造函数注入显式注入。

代码语言:javascript
复制
public abstract class BaseService {
    protected readonly IAmazonDynamoDB dynamoClient;
    protected readonly IPocoDynamo pocoDynamo;

    public BaseService(IAmazonDynamoDB dynamoClient, IPocoDynamo pocoDynamo) {        
        this.dynamoClient = dynamoClient;
        this.pocoDynamo = pocoDynamo;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58133702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档