Я регистрирую службу кэширования в Startup.cs следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddMemoryCache();
services.AddTransient<DataFacade, DataFacade>();
...
}
В этом же проекте мой заголовок _Layout.cshtml содержит ViewComponent
@await Component.InvokeAsync(nameof(ViewComponents.PageHeader))
Это делаетвызывает компонент ModelBuilder и имеет конструктор следующим образом:
using MyApp.Services;
using MyApp.Website.ModelBuilder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc;
namespace MyApp.Website.ViewComponents
{
[ViewComponent]
public class Header : ViewComponent
{
private readonly HeaderModelBuilder _modelBuilder;
public Header(HeaderModelBuilder modelBuilder)
{
_modelBuilder = modelBuilder;
}
... и сервис ModelBuilder ссылается на сервис DataFacade:
using MyApp.Data.ExternalCountryData;
using MyApp.Services;
using MyApp.Website.Constants;
using MyApp.Website.Models;
namespace MyApp.Website.ModelBuilder
{
public class HeaderModelBuilder
{
private readonly DataFacade _dataFacade;
public HeaderModelBuilder(DataFacade dataFacade)
{
_dataFacade = dataFacade;
}
..., конструктор которого имеет видследующим образом:
using System;
using MyApp.Data;
using MyApp.Data.ExternalSiteData;
using MyApp.Domain.Services.Data;
using Microsoft.Extensions.Caching.Memory;
namespace MyApp.Services
{
public class DataFacade
{
private MemoryCache _cache;
public DataFacade(MemoryCache memoryCache)
{
_cache = memoryCache;
}
Однако при выполнении кода программа Program.cs выдает следующее:
InvalidOperationException: невозможно разрешить службу для типа 'Microsoft.Extensions.Caching.Memory.MemoryCache 'при попытке активировать' MyApp.Services.DataFacade '.
Если я закомментирую компонент представления, к кэшу могут нормально обращаться другие части приложения.
Почему у компонента представления будут проблемы? Я неправильно регистрирую одну из служб?