Esse é só um exemplo simples do que podemos fazer. O Blazor possuí várias outras funcionalidades, como: Parâmetros, Eventos, Data Binding, Rotas com parâmetros, Injeção de Dependência, Layouts, Templating etc.
Para utilizar o Blazor basta ter instalado o SDK da última versão do .NET, que você encontra no seguinte link:
O Visual Studio 2019 tem um bom suporte para a edição dos componentes Blazor, e é uma ótima opção. Mas se preferir você também pode utilizar o Visual Studio Code, ou qualquer outro Editor da sua preferência.
Com isso você vai conseguir criar projetos usando os templates do Blazor. No Visual Studio basta criar um projeto do tipo “Blazor App”.
Mas se você preferir utilizar o VS Code para criar o seu projeto Blazor, basta executar o comando dotnet new blazor, como mostra a Figura 2.
Se você quer ter uma ideia de como o Blazor está caminhando, minha dica é dar uma olhada nesse repositório github: https://github.com/AdrienTorris/awesome-blazor. Nele você vai encontrar uma extensa lista de Artigos, Blogs, Exemplos, Vídeos, Tutoriais e Bibliotecas.
Uma boa notícia é que empresas como DevExpress, Telerik e Syncfusion já oferecem parte de seus componentes para Blazor, o que nos dá um pouco mais de segurança para adotar o framework.
Para concluir, se você trabalha com C#, o Blazor é uma oportunidade incrível de aproveitar todo o seu conhecimento .NET para criar aplicações Web ricas e rápidas!
Nós na Algorama já estamos utilizando o Blazor em vários de nossos projetos, e já temos aplicações rodando em Produção!
Esse blog foi criado para tratar apenas de Blazor, e você já pode encontrar aqui uma série de artigos aqui que exploram a fundo esse excelente framework!

O Blazor possuí um Injetor de Dependências nativo, baseado no Injetor de Dependências do próprio ASP.NET Core. Nesse artigo iremos ver como utilizar Injeção de Dependência (ou DI) no Blazor.
Para isso vamos utilizar uma aplicação Blazor já existente. Qualquer dúvida dê uma olhada nesse artigo, que mostra como criar um novo projeto Blazor usando o template do Visual Studio.
Não vou explicar o que é Injeção de Dependência a fundo. Se você não conhece o conceito, sugiro que procure material teórico sobre o assunto. DI não é só importante para Blazor, é importante em qualquer tecnologia de desenvolvimento de software.
Mas se você não está familiarizado com o termo, basta saber que Injeção de Dependência é um padrão que viabiliza o desacoplamento entre partes da nossa aplicação. Em vez de criar uma dependência direta entre duas partes da aplicação, nós injetamos essa dependência no momento da execução do software.
A Injeção de Dependência é útil no Blazor, assim como é útil em qualquer aplicação em que você queira adotar boas práticas de desenvolvimento. Mas vamos citar aqui as duas principais razões pelas quais você deve usar Injeção de Dependência no Blazor:
Compartilhar uma única instância de um serviço, entre vários componentes. Isso é possível utilizado um conceito chamado Singleton, que veremos mais adiante.
Desacoplar os componentes das implementações concretas dos nossos serviços. Ou seja, em vez do meu componente ter acesso direto ao serviço DataAccess, com o DI o componente terá acesso à interface IDataAccess. Isso facilita muito a adoção de Testes Unitários.
Na prática um Injetor de Dependências funciona como um dicionário. Nós registramos no Injetor a classe e a interface (DataAccess IDataAccess). E toda vez que um componente precisar de um IDataAccess, o Injetor deverá retornar uma instância do DataAccess.
O Registro das Dependências devem ser feitos na classe Startup. Como você pode ver na Figura 1, temos um método ConfigureServices, que recebe como parâmetro um IServiceCollection. É através dessa coleção de serviços que podemos registrar nossas dependências, para que o Injetor resolva em tempo de execução.
No exemplo da Figura 1 estamos registrando nossa dependência como um Singleton. Temos basicamente três possíveis Lifetimes, que podem ser utilizados com Injeção de Dependência. São eles:
Singleton: O DI cria uma única instância do serviço, que será compartilhada por todos os componentes da aplicação onde o serviço for injetado. Basicamente teremos apenas uma instância de um Singleton em toda a aplicação.
Transient:Toda vez que o componente solicitar uma instância de um serviço Transiente ao DI, ele irá receber uma nova instância do serviço. É como executar um new Classe(), toda vez que precisar do Serviço.
Scoped: O Scoped significa que a instância do serviço será única para cada usuário da aplicação. Isso só faz sentido em aplicações Web rodando em um servidor, onde vários usuários interagem com a mesma aplicação (que é o caso do Blazor server-side). No caso do Blazor (client-side), a aplicação roda no browser, via WebAssembly, então o Scoped tem o mesmo efeito do Singleton.
O Blazor nos oferece três serviços default, que já vêm automaticamente registrados no injetor de dependência. São eles:
HttpClient (Singleton) – Serviço para realizar requisições HTTP. Esse serviço é muito usado para que nossa aplicação Blazor se comunique com APIs em Backend.
NavigationManager (Singleton) – Contém métodos auxiliares para trabalharmos com URLs. É um serviço muito útil na questão de navegação na aplicação.
Para injetar dependências em um Componente do Blazor, usamos a diretiva @inject. No projeto de exemplo, abra o componente FetchData.razor, e veja que nele estamos injetando o serviço WeatherForecastService (Figura 2).
Note que para injetar um serviço nós primeiro definimos o nome do Serviço que será injetado, e em seguida o nome da Propriedade do Componente que irá receber a instância do Serviço. Nós podemos injetar quantos serviços forem necessários em um único componente.