C# Blazor 学习笔记(10):依赖注入

前言

Blazor 具有前后端不分离模式,但是如何直接调用需要一定的设置

Blazor 依赖注入

依赖注入在spring里面很常见,毕竟.NET 是个巨型融合怪。只要你这个好用我就抄。我还是很佩服的,能实现就行,谁管是谁第一个开发的。MVVM还是WPF首创的呢,Vue用也没关系。能简化程序员逻辑就行。

依赖注入用于解决什么问题?

依赖注入解决了两个问题

  • 代码解耦
    • 使用先存后拿的形式,我们使用的时候直接拿依赖对象,不需要知道依赖对象是怎么来的。
  • 生命周期
    • 如果解耦问题只是为了程序写起来舒不舒服。那么生命周期就是代码的功能问题。

下面重点讲解生命周期

依赖注入的生命周期。

微软官方文档 依赖注入生命周期
asp.net core 依赖注入
AddSingleton的生命周期: 项目启动-项目关闭 相当于静态类 只会有一个
AddScoped的生命周期: 请求开始-请求结束 在这次请求中获取的对象都是同一个
AddTransient的生命周期: 请求获取-(GC回收-主动释放) 每一次获取的对象都不是同一个

根据我实际测试得到如下结果。

  • Singleton:单列
    • 生命周期:程序
    • 程序启动时注册,程序结束时销毁
    • 一般不用,因为每个网页共用的情况很少
  • Scoped:范围
    • 生命周期:网页
    • 网页打开时注册,网页刷新时销毁
    • 两个相同地址的网页依赖对象互补干扰,即每个网页对象唯一
    • 使用频率最高,和浏览器缓存搭配使用,相当于全局静态变量
  • Transient:瞬时
    • 生命周期:路由
    • 路由不动时存在,路由移动时销毁
    • 即从index/a 调到index/b再跳回index/a就销毁了。
    • 使用频率较低,相当于临时变量,不如直接声明临时变量。

那么根据实际情况,我们还需要加一个。生命周期:浏览器。那么就要用到浏览器缓存了。因为我们不希望用户一刷新网页就跳到登录页面了,还是要和浏览器绑定。

行为算不算网页刷新
刷新网页
页面点击的路由跳转不算
在网页手动输入的页面跳转

测试代码

服务类

    public class TestModel
    {
        public  int count { get; set; } = 0;
        public  int AddCount()
        {
            count++;
            return count;
        }
    }

Blazor点击网页

@using BlazorApp2.Data
@inject TestModel TestService

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>
<p>Static count : @StaticCount </p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;
    private int StaticCount = 0;


    private void IncrementCount()
    {
        currentCount++;
        StaticCount = TestService.AddCount();
        //Console.WriteLine("打印"+currentCount);
    }
}


在App.razor里面注册

            builder.Services.AddSingleton<TestModel>();
            builder.Services.AddScoped<TestModel>();
            builder.Services.AddTransient<TestModel>();

总结

一般来说,大部分时候都是Scoped(范围)来绑定整个页面,再用Cookie让登录不登出页面。

补充

日期2023年8月4日

我看了一下别人的写法
.Net Core WebApi Redis消息订阅

在这里插入图片描述
我觉得他说的很有道理。
Singleton非常容易内存泄漏,基本不用。
Scoped会在每次页面刷新的时候重新注入依赖。会将依赖注入初始化。用户使用不稳定,用来跨页面传值不稳定。
Transient虽然会在每次路由跳转的时候消失,但是反而是最稳定的。因为页面刷新和路由跳转都是一样的。反而不容易出Bug。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值