У меня есть интеграция со Stock, и каждый раз, когда я хочу публиковать / получать данные, я должен настраивать stockContext, получая некоторые данные из моей базы данных. Таким образом, мои сервисы, такие как ProductService, могут работать с этой стандартной интеграцией.
У меня вопрос могу ли я настроить свой 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? Но я сомневаюсь, что мне нужно получить некоторые данные из БД, прежде чем я смогу их настроить