Я создал проект ASP.NET Blazor. Существует клиент, который представляет собой приложение Blazor WebAssembly, и у него есть BaseLibrary, в котором я храню DTO и объекты, а также ClientLibrary, который я использую для вызова API.
В ClientLibrary существует интерфейс IGenericServiceInterface и GenericServiceImplementation. GenericServiceImplementation наследует функции IGenericServiceInterface, особенно для вызовов API. Я зарегистрировал все это в файле program.cs клиента и файле _imports.razor.
Аллергия, лекарство, заболевание, ингредиент — это единое целое. например, объект лекарственного средства
using BaseLibrary.EntitiesRelation;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
namespace BaseLibrary.Entities
{
[Index(nameof(Medication_Name), IsUnique = true)]
public class Medication
{
[Key]
public int Medication_Id { get; set; }
public string? Medication_Name { get; set; }
// Relation N:M
public virtual ICollection
PatientMedications { get; set; } = new List();
}
}
using System.Net.Http.Json;
using BaseLibrary.Responses;
using ClientLibrary.Helpers;
using ClientLibrary.Services.Contracts;
namespace ClientLibrary.Services.Implementations
{
public class GenericServiceImplementation(GetHttpClient getHttpClient) : IGenericServiceInterface
{
// Create
public async Task Insert(T item, string baseUrl)
{
var httpClient = await getHttpClient.GetPrivateHttpClient();
var response = await httpClient.PostAsJsonAsync($"{baseUrl}/add", item);
var result = await response.Content.ReadFromJsonAsync();
return result!;
}
// Read All
public async Task GetAll(string baseUrl)
{
var httpClient = await getHttpClient.GetPrivateHttpClient();
var result = await httpClient.GetFromJsonAsync($"{baseUrl}/all");
return result!;
}
// Update
public async Task Update(T item, string baseUrl)
{
var httpClient = await getHttpClient.GetPrivateHttpClient();
var response = await httpClient.PutAsJsonAsync($"{baseUrl}/update", item);
var result = await response.Content.ReadFromJsonAsync();
return result!;
}
// Delete
public async Task Delete(int id, string baseUrl)
{
var httpClient = await getHttpClient.GetPrivateHttpClient();
var response = await httpClient.DeleteAsync($"{baseUrl}/delete/{id}");
var result = await response.Content.ReadFromJsonAsync();
return result!;
}
public async Task GetById(int id, string baseUrl)
{
var httpClient = await getHttpClient.GetPrivateHttpClient();
var result = await httpClient.GetFromJsonAsync($"{baseUrl}/single/{id}");
return result!;
}
}
}
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Cannot provide a value for property 'medicationService' on type 'Client.Pages.ContentPages.AdminFunctions.Allergies'. There is no registered service of type 'ClientLibrary.Services.Contracts.IGenericServiceInterface`1[Client.Pages.ContentPages.AdminFunctions.Medication]'.
System.InvalidOperationException: Cannot provide a value for property 'medicationService' on type 'Client.Pages.ContentPages.AdminFunctions.Allergies'. There is no registered service of type 'ClientLibrary.Services.Contracts.IGenericServiceInterface`1[Client.Pages.ContentPages.AdminFunctions.Medication]'.
at Microsoft.AspNetCore.Components.ComponentFactory.c__DisplayClass9_0.g__Initialize|1(IServiceProvider serviceProvider, IComponent component)
at Microsoft.AspNetCore.Components.ComponentFactory.InstantiateComponent(IServiceProvider serviceProvider, Type componentType, IComponentRenderMode callerSpecifiedRenderMode, Nullable`1 parentComponentId)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.InstantiateChildComponentOnFrame(RenderTreeFrame[] frames, Int32 frameIndex, Int32 parentComponentId)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewComponentFrame(DiffContext& diffContext, Int32 frameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewSubtree(DiffContext& diffContext, Int32 frameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InsertNewFrame(DiffContext& diffContext, Int32 newFrameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl)
at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer renderer, RenderBatchBuilder batchBuilder, Int32 componentId, ArrayRange`1 oldTree, ArrayRange`1 newTree)
at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()
Как видите, я все везде внедрил, но не понимаю, в чем проблема.
Я создал проект ASP.NET Blazor. Существует клиент, который представляет собой приложение Blazor WebAssembly, и у него есть BaseLibrary, в котором я храню DTO и объекты, а также ClientLibrary, который я использую для вызова API. В ClientLibrary существует интерфейс IGenericServiceInterface и GenericServiceImplementation. GenericServiceImplementation наследует функции IGenericServiceInterface, особенно для вызовов API. Я зарегистрировал все это в файле program.cs клиента и файле _imports.razor. Аллергия, лекарство, заболевание, ингредиент — это единое целое. [b]например, объект лекарственного средства[/b] [code]using BaseLibrary.EntitiesRelation; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations;
namespace ClientLibrary.Services.Implementations { public class GenericServiceImplementation(GetHttpClient getHttpClient) : IGenericServiceInterface {
// Create public async Task Insert(T item, string baseUrl) { var httpClient = await getHttpClient.GetPrivateHttpClient(); var response = await httpClient.PostAsJsonAsync($"{baseUrl}/add", item); var result = await response.Content.ReadFromJsonAsync(); return result!; }
// Read All public async Task GetAll(string baseUrl) { var httpClient = await getHttpClient.GetPrivateHttpClient(); var result = await httpClient.GetFromJsonAsync($"{baseUrl}/all"); return result!; }
// Update public async Task Update(T item, string baseUrl) { var httpClient = await getHttpClient.GetPrivateHttpClient(); var response = await httpClient.PutAsJsonAsync($"{baseUrl}/update", item); var result = await response.Content.ReadFromJsonAsync(); return result!; }
// Delete public async Task Delete(int id, string baseUrl) { var httpClient = await getHttpClient.GetPrivateHttpClient(); var response = await httpClient.DeleteAsync($"{baseUrl}/delete/{id}"); var result = await response.Content.ReadFromJsonAsync(); return result!; }
public async Task GetById(int id, string baseUrl) { var httpClient = await getHttpClient.GetPrivateHttpClient(); var result = await httpClient.GetFromJsonAsync($"{baseUrl}/single/{id}"); return result!; }
} } [/code] [b]Program.CS[/b] [code]builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); [/code] [b]Imports.razor[/b] [code]@inject IGenericServiceInterface allergyService @inject IGenericServiceInterface diseaseService @inject IGenericServiceInterface ingredientService @inject IGenericServiceInterface medicationService [/code] [b]Когда я запускаю приложение и нажимаю на страницу аллергии, отображается эта проблема[/b] [code]Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] Unhandled exception rendering component: Cannot provide a value for property 'medicationService' on type 'Client.Pages.ContentPages.AdminFunctions.Allergies'. There is no registered service of type 'ClientLibrary.Services.Contracts.IGenericServiceInterface`1[Client.Pages.ContentPages.AdminFunctions.Medication]'. System.InvalidOperationException: Cannot provide a value for property 'medicationService' on type 'Client.Pages.ContentPages.AdminFunctions.Allergies'. There is no registered service of type 'ClientLibrary.Services.Contracts.IGenericServiceInterface`1[Client.Pages.ContentPages.AdminFunctions.Medication]'. at Microsoft.AspNetCore.Components.ComponentFactory.c__DisplayClass9_0.g__Initialize|1(IServiceProvider serviceProvider, IComponent component) at Microsoft.AspNetCore.Components.ComponentFactory.InstantiateComponent(IServiceProvider serviceProvider, Type componentType, IComponentRenderMode callerSpecifiedRenderMode, Nullable`1 parentComponentId) at Microsoft.AspNetCore.Components.RenderTree.Renderer.InstantiateChildComponentOnFrame(RenderTreeFrame[] frames, Int32 frameIndex, Int32 parentComponentId) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewComponentFrame(DiffContext& diffContext, Int32 frameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewSubtree(DiffContext& diffContext, Int32 frameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InsertNewFrame(DiffContext& diffContext, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer renderer, RenderBatchBuilder batchBuilder, Int32 componentId, ArrayRange`1 oldTree, ArrayRange`1 newTree) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException) at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry) at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue() [/code] Как видите, я все везде внедрил, но не понимаю, в чем проблема.
Я создал проект ASP.NET Blazor. Существует клиент, который представляет собой приложение Blazor WebAssembly, и у него есть BaseLibrary, в котором я храню DTO и объекты, а также ClientLibrary, который я использую для вызова API.
В ClientLibrary...
Я создал проект ASP.NET Blazor. Существует клиент, который представляет собой приложение Blazor WebAssembly, и у него есть BaseLibrary, в котором я храню DTO и объекты, а также ClientLibrary, который я использую для вызова API.
В ClientLibrary...
У меня есть приложение Blazor с режимом рендеринга Webassembly. В моем клиентском проекте у меня есть эта страница:
@page /demo
@page /{lang}/demo
@inject IDemoService DemoService
@inject ICsvImportService CsvImportService
@inject...
У меня есть приложение Blazor с режимом рендеринга Webassembly. В моем клиентском проекте у меня есть эта страница:
@page /demo
@page /{lang}/demo
@inject IDemoService DemoService
@inject ICsvImportService CsvImportService
@inject...
У меня есть приложение Blazor с режимом рендеринга Webassembly. В моем клиентском проекте у меня есть эта страница:
@page /demo
@page /{lang}/demo
@inject IDemoService DemoService
@inject ICsvImportService CsvImportService
@inject...