 Blazor - 
Usando o padrão Repositório - III
Blazor - 
Usando o padrão Repositório - III|  | Hoje veremos como usar o padrão repositório em uma aplicação Blazor Server para exibir os posts de um blog. | 
Continuando a segunda parte do artigo vamos criar os componentes em nosso projeto Blazor para usar o repositório e exibir as categorias e os posts relacionados.
|   | 
Criando os componentes para exibir as categorias
Vamos iniciar definindo no componente NavMenu.razor que esta na pasta Shared do projeto, o código para exibir no meu lateral esquerdo o link para as categorias cadastradas.
Para isso altere o código conforme abaixo:
| @inject ICategoriaRepository categoriaService <div class="top-row pl-4 navbar navbar-dark">
    <a class="navbar-brand" href="">BlogApp</a>
    <button class="navbar-toggler" @onclick="ToggleNavMenu">
        <span class="navbar-toggler-icon"></span>
    </button>
</div><div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">        @foreach (var categoria in Categorias)
        {
            <li class="nav-item px-4">
                <b><a href="/categoria/@categoria.CategoriaId">@categoria.Nome</a></b>
            </li>
        }
    </ul>
</div>@code {
    private bool collapseNavMenu = true;    private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
    public IEnumerable<Categoria> Categorias { get; set; }    private void ToggleNavMenu()
    {
        collapseNavMenu = !collapseNavMenu;
    }
    protected override void OnParametersSet()
    {
        Categorias = categoriaService.Get();
    }
} | 
De forma bem simples injetamos o serviço referente a repositório para Categoria e obtemos todas as categorias no método OnParametersSet(). A seguir exibir cada categoria no menu percorremos cada objeto exibindo o nome e definindo o link para /categoria/@categoria.CategoriaId.
Assim quando cada link for clicado teremos a definição da chamada para a rota /categoria/id.
Vamos agora criar na pasta Pages o componente CategoriaPage.razor que vai exibir os posts referente à categoria selecionada no menu incluindo o código abaixo:
| @page "/"
@page "/categoria/{id:int}"@inject IPostRepository postService@if (Posts.Count() > 0 ) { @foreach (var post in Posts) { <div> <h3><a href="/post/@post.PostId">@post.Titulo</a></h3> <p>@post.PublicadoEm?.ToString("dddd d MMMM yyyy") - @post.Autor</p> <p><i>@post.Conteudo</i></p> </div> } } else { <h2>Macoratti.net - Quase tudo para .NET</h2> } @code {     [Parameter]
    public virtual int Id { get; set; }    public virtual IEnumerable<Post> Posts { get; set; }    protected override void OnParametersSet()
    {
        try
        {
            Posts = postService.GetPostsPorCategoriaId(Id);
        }
        catch
        {
            throw new Exception("Erro ao obter os posts");
        }
    }
} | 
Note que estamos injetando uma instância do repositório para Post e no método OnParametersSet() estamos obtendo a relação de posts para o id da categoria selecionada.
Poderíamos continuar criando outro componente para exibir detalhes de um post ou mesmo definir uma url para acessar um post em outro link. Fica como um exercício.
Executando o projeto teremos o resultado a seguir:

						Pegue o projeto aqui:  BlogApp.zip 
						(sem as referências)
 
						 BlogApp.zip 
						(sem as referências)
						
						"Tendo sido, pois, justificados 
						pela fé, temos paz com Deus, por nosso Senhor Jesus 
						Cristo;"
						
						Romanos 5:1
 
ASP .NET Core - Iniciando com o Blazor
ASP .NET Core - CRUD usando Blazor e Entity ...
Blazor - O novo framework SPA da Microsoft
ASP .NET Core - Iniciando com o Blazor -
ASP .NET Core - CRUD usando Blazor e Entity ...
Blazor - O novo framework SPA da Microsoft -
ASP .NET Core - Iniciando com o Blazor
ASP .NET Core - CRUD usando Blazor e Entity ... -
Blazor - O novo framework SPA da Microsoft -
Visual Studio Code - Suporte ao desenvolvimento Blazor