У меня есть сервисный проект, который обрабатывает поиск и объединение PDF-файлов, и проект репозитория, который имеет контекст и модели.
Изначально мы создали его с функциональным API и решили, что это слишком много накладных расходов. для простого приложения и выплеснул логику в простой сервис и сослался на него.
Я пытаюсь вызвать методы внутри службы со страницы Blazor, я зарегистрировал Службу в файле запуска и внедрил Службы на странице для DI, но теперь я получаю сообщение об ошибке ниже. В частности, это касается контекста, расположенного в репозитории, на который ссылается Сервис.
Я поиграл с инъекцией, добавлением Сервисов в файле запуска и различными изменениями форматирования, чтобынапр.
Настройка служб в файле запуска:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IBOLService, BOLService>();
services.AddTransient<IPDFService, PDFService>();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddHttpClient();
services.AddDbContext<CoviaDevIntegrationControlContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("IntegrationControl")));
}
Ввод основных страниц бритвы и использование выдержки:
@page "/download"
@using LAS.BOLDownloader.Models
@using System.IO;
@using System.Net.Http;
@using System.Net.Http.Headers
@using Microsoft.AspNetCore.Components.Web
@using LAS.BOLDownloader.Data;
@using BOL.Data;
@using BOL.Services;
@inject IJSRuntime js
@inject Microsoft.JSInterop.IJSRuntime JS
@inject CoviaDevIntegrationControlContext IntegrationControlContext
@inject IHttpClientFactory clientFactory
@inject IBOLService _bolService
@inject IPDFService _pdfService
Класс обслуживания:
public class BOLService : IBOLService
{
private CoviaDevIntegrationControlContext _context;
public BOLService(CoviaDevIntegrationControlContext context)
{
_context = context;
}
public async Task<byte[][]> GetDocuments(string searchString, string IdType, int SiteId)
{
var bolNumbers = searchString.Split(',');
if (IdType == "BolNumber")
{
return await _context.Las2cpBolstaging.Where(o => bolNumbers.Contains(o.BolNumber.ToString()) && o.PlantId == SiteId).Select(o => o.BolDoc).ToArrayAsync();
}
else if (IdType == "ShipmentId")
{
return await _context.Las2cpBolstaging.Where(o => bolNumbers.Contains(o.BolNumber.ToString()) && o.PlantId == SiteId).Select(o => o.BolDoc).ToArrayAsync();
}
else
{
return null;
}
}
Контекст в хранилище:
public partial class CoviaDevIntegrationControlContext : DbContext
{
public CoviaDevIntegrationControlContext()
{
}
public CoviaDevIntegrationControlContext(DbContextOptions<CoviaDevIntegrationControlContext> options)
: base(options)
{
}
public virtual DbSet<Las2cpBoldocStaging> Las2cpBoldocStaging { get; set; }
public virtual DbSet<Las2cpBolstaging> Las2cpBolstaging { get; set; }
public virtual DbSet<LasBols> LasBols { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=dev-sql1;Database=Covia.Dev.IntegrationControl;Trusted_Connection=True;MultipleActiveResultSets=True;");
}
}
Функция, использующая инъекцию:
protected async Task GetBOL(int SiteId, string IdType)
{
var client = clientFactory.CreateClient();
si.SiteId = SiteId;
si.IdType = IdType;
try
{
Process bp = new BOLProcess( _bolService, _pdfService);
var bolPdf = bp.GetBOLs(si.searchString, si.IdType, si.SiteId).Result;
bolResultsList = bp.GetResults(si.searchString, si.IdType, si.SiteId).Result;
if (bolPdf != null && bolPdf.Length > 0)
{
await FileUtil.SaveAs(js, "BOLDocument.pdf", bolPdf);
}
}
catch (Exception ex)
{
var error = ex.Message;
}
}
InvalidOperationException: Ошибка при проверке дескриптора службы 'ServiceType:BOL.Services.IBOLService Время жизни: переходный тип реализации: BOL.Services.BOLService ': невозможно разрешить службу для типа' BOL.Repository.Models.CoviaDevIntegrationControlContext 'при попытке активировать' BOL.Services.BOLService '.
Внутреннее исключение InvalidOperationException: невозможно разрешить службу для типа 'BOL.Repository.Models.CoviaDevIntegrationControlContext 'при попытке активировать' BOL.Services.BOLService '.