与三层架构的第三方集成

时间:2019-05-18 14:17:42

标签: c# asp.net .net asp.net-mvc asp.net-core

我与Stock集成在一起,每当我要发布/获取数据时,都应该通过从数据库中获取一些数据来配置stockContext。因此,我的服务(如ProductService)可以与该库存集成一起使用。 我有一个问题我可以在单独的Service中配置stockContext吗? 有一个例子:

public class StockProviderService : IStockProviderService {

    private readonly IDatabase _context;

    public StockProviderService ()
    {
        _context = new Database();
    }

    public StockProviderService (IDatabase context)
    {
        _context = context;
    }

    public IDataProvider GetStockContext(Integration name, Guid merchantId)
    {
        var merchantCredentials = _context.StockCredentials.FirstOrDefault(wc => wc.MerchantId == new merchantId);

        var config = new StockIntegrationConfig()
        {
            ApiKey = merchantCredentials.ApiKey,
            ApiSecret = merchantCredentials.ApiSecret
        };

        return StockIntegrationEngine.GetDataProvider(name, config);
    }
}

现在我可以像这样使用ContextConfigurator了:

public async Task SendProductsToStock(IEnumerable<Guid> productIds, Integration name, Guid merchantId)
    {
        var dataProvider = _stockProvider.GetStockContext(name, merchantId); <-- HERE

        var products = _context.Products
            .Where(p => productIds.Contains(p.ProductID))
            .ToList();

        var stockProducts = Mapper.Map<List<ProductDataRequest>>(products);

        await dataProvider.Products.CreateProducts(stockProducts);

        await _context.SaveChangesAsync();
    }

也许最好将我的GetStockContext保存在ServiceLayer Service以外的另一个文件/项目中?但我怀疑必须先从数据库中获取一些数据,然后才能对其进行配置

0 个答案:

没有答案