Study Blazor .NET(六)依赖注入

翻译自:Study Blazor .NET,转载请注明。

依赖注入

在blazor中每一个组件使用 @inject 指令实现依赖注入(DI)。

可以像下面示例那样,在blazor组件中使用类似于 MVC 应用程序中的 Startup.cs > ConfigureService 方法来实现注入依赖。这些服务的生命周期和 MVC 应用程序类似,例如 Singleton ,TransientScoped,这里我们使用的是已经存在的ASP.Net 生态系统。

// In Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IDataAccess, DataAccess>();
}
//DiComponent.razor
@page '/dependency-inject'
@using Services
@inject IDataAccess DataObject

@if (Students != null)
{
    Total Student: @Students.Count.ToString();
}

@functions {
    private List<Student> Students;
    protected override async Task OnInitAsync()
    {
        Students = await DataObject.GetStudentData();
    }
}

消费 REST API Service

下面blazor提供的模板程序中,在 FetchData 组件里使用 HttpClient 系统类,组件可以使用 @inject 注入并进一步扩展访问 REST API Service。

//FetchData.razor
@page "/fetchdata"
@inject HttpClient Http

<h1>Weather forecast</h1>
<p>This component demonstrates fetching data from the server.</p>

@if (forecasts == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Date</th>
                <th>Temp. (C)</th>
                <th>Temp. (F)</th>
                <th>Summary</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var forecast in forecasts)
            {
                <tr>
                    <td>@forecast.Date.ToShortDateString()</td>
                    <td>@forecast.TemperatureC</td>
                    <td>@forecast.TemperatureF</td>
                    <td>@forecast.Summary</td>
                </tr>
            }
        </tbody>
    </table>
}

@functions {
    WeatherForecast[] forecasts;
    protected override async Task OnInitAsync()
    {
        forecasts = await Http.GetJsonAsync<WeatherForecast[]>("sample-data/weather.json");
    }
    class WeatherForecast
    {
        public DateTime Date { get; set; }
        public int TemperatureC { get; set; }
        public int TemperatureF { get; set; }
        public string Summary { get; set; }
    }
}
posted @   眼圈黑黑  阅读(720)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示