1
Hello,
I’m taking the first steps on Blazor and following an example I saw on the internet, which makes the Load Menu and Submenu straight from the data bank, I’m having problem at compilation time:

The project is divided this way:
I basically injected the Menuinfoservice code in the client project’s Navmenu.Razor:
@using FirstBlazorFinal.Shared.Services
@using FirstBlazorFinal.Shared.Models
@inject MenuInfoService MenuInfoService
<div class="top-row pl-4 navbar navbar-dark">
    <a class="navbar-brand" href="">FirstBlazorFinal</a>
    <button class="navbar-toggler" @onclick="ToggleNavMenu">
        <span class="navbar-toggler-icon"></span>
    </button>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
@if (menuList == null)
    {
        <p><em>Loading...</em></p>
    }
    else
    {
        <ul class="nav flex-column">
            @foreach (var menu in menuList)
            {
                @if (menu.ParentMenuId == 0)
                {
                    <li class="nav-item px-3">
                        <NavLink class="nav-link" href="@menu.PageMenu" @onclick="()=>GetIsClicked(menu)">
                            <span class="@menu.IconName" aria-hidden="true"></span>@menu.MenuName
                        </NavLink>
                        <ul class="nav flex-column">
                            @foreach (var subMenu in menuList)
                            {
                                @if (menu.MenuId == subMenu.ParentMenuId)
                                {
                                    @if (expandSubMenu && menu.MenuId == clickedMenu)
                                    {
                                        <li class="nav-item px-3">
                                            <NavLink class="nav-link" href="@subMenu.PageMenu" @onclick="()=>GetIsClicked(subMenu)">
                                                <span class="@subMenu.IconName" aria-hidden="true"></span>@subMenu.MenuName
                                            </NavLink>
                                        </li>
                                    }
                                }
                            }
                        </ul>
                    </li>
                }
            }
        </ul>
    }
</div>
@code {
    private bool collapseNavMenu = true;
    private bool expandSubMenu;
    private int clickedMenu = 0;
    private bool hasPageName = true;
    private int prevClickedMenu = 0;
    public IEnumerable<MenuInfo> menuList;
    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
    private void ToggleNavMenu()
    {
        if (hasPageName)
        {
            collapseNavMenu = !collapseNavMenu;
        }
    }
    public void GetIsClicked(MenuInfo menuInfo)
    {
        clickedMenu = menuInfo.MenuId;
        if (prevClickedMenu != clickedMenu)
        {
            expandSubMenu = false;
            if (menuInfo.PageMenu != "" || menuInfo.MenuName == "Home")
            {
                hasPageName = true;
            }
            else
            {
                expandSubMenu = !expandSubMenu;
                hasPageName = false;
            }
        }
        else
        {
            expandSubMenu = !expandSubMenu;
        }
        prevClickedMenu = clickedMenu;
    }
    protected override async Task OnInitializedAsync()
    {
        menuList = await MenuInfoService.GetMenuData();
    }
}
I also added the service in the Startup class of the server project:
using FirstBlazorFinal.Shared.Data;
using FirstBlazorFinal.Shared.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace FirstBlazorFinal.Server
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddRazorPages();
            services.AddSingleton<MenuInfoService>();
...
But I didn’t know where to set up this service for the client to see it. Where can I check this error?

Can you debug the code and verify that this service is actually being instantiated? PS.: Singleton should not be configured via the class interface?
– Leandro Angelo
Hello, I adjusted Singleton, but the error persists, I still don’t understand where the error occurs, in _Imports.Razor (client project) also included @using Firstblazorfinal.Shared.Services which is where is the class of Menuinfoservice that is used in Navmenu.Razor.
– NR_Andre
You need to inject the dependency, not the class. see documentation https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1
– Leandro Angelo
There’s a post on Stackoverflow about it. Does it help you? https://stackoverflow.com/questions/57027047/inputtext-requires-a-value-for-the-valueexpression-parameter
– Renato C.Francisco