当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • Blazor 依赖注入
    • 依赖注入用于解决什么问题?
    • 依赖注入的生命周期。
    • 测试代码
  • 总结

前言

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让登录不登出页面。

相关文章:

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

文章目录 前言Blazor 依赖注入依赖注入用于解决什么问题&#xff1f;依赖注入的生命周期。测试代码 总结 前言 Blazor 具有前后端不分离模式&#xff0c;但是如何直接调用需要一定的设置 Blazor 依赖注入 依赖注入在spring里面很常见&#xff0c;毕竟.NET 是个巨型融合怪。只…...

接口请求(get、post、head等)详解

一&#xff0e;接口请求的六种常见方式&#xff1a; 1、Get 向特定资源发出请求&#xff08;请求指定页面信息&#xff0c;并返回实体主体&#xff09; 2、Post 向指定资源提交数据进行处理请求&#xff08;提交表单、上传文件&#xff09;&#xff0c;又可能导致新的资源的建…...

【【萌新的STM32学习-4】】

萌新的STM32学习-4 STM32系统框架 1.1 Cortex M 内核& 芯片 F1有四个驱动单元 四个被动单元 AHB 高级高性能总线 APB 高级外围总线 部分系统结构 最上面的ICode 总线直接连接到了内部Flash 不需要通过总线矩阵 . D Code 总线&#xff08;D - Bus&#xff09; 这是Cort…...

C++ Primer Plus第五章 习题

目录 复习题&#xff1a; 1.入口条件循环和出口条件循环之间的区别是什么&#xff1f;各种c循环分别属于其中的哪一种&#xff1f; 2.如果下面的代码片段是有效程序的组成部分&#xff0c;它将打印什么内容&#xff1f; 3.如果下面的代码片段是有效程序的组成部分&#xff0…...

软考A计划-系统集成项目管理工程师-信息文档和配置管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…...

Vue 路由 路由守卫

路由守卫 正如其名&#xff0c; vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。简单来说&#xff0c;就是在路由跳转 时候的一些钩子&#xff0c;当从一个页面跳转到另一个页面时&#xff0c;可以在跳转前、中、后做一些事情。 当你打开一个页面的前后需…...

基于springboot的课程作业管理系统【附开题|ppt|万字文档(LW)和搭建文档】

主要功能 学生登录&#xff1a; ①首页、个人中心&#xff1a;修改密码、个人信息管理等 ②公告信息管理、课程信息管理、学生选课管理、作业布置管理、作业提交管理、作业评分管理、课程评价管理、课程资源管理 教师登录&#xff1a; ①首页、个人中心&#xff1a;修改密码、…...

关于个人微信API接口的开发

个人微信开发API接口可拓展功能说明 1、个人微信多账号管理、聚合聊天、多个微信号同时登陆、多个微信号集中在一个窗口进行聊天&#xff0c;实现一人多号同时沟通快速提升沟通效率&#xff0c;提升微信营销效率。 2、客服灵活分配&#xff1a;客服主管可自由分配微信号给指定…...

华为PMS API client token auth failed

对接华为pms时出现问题&#xff0c;提示华为PMS API client token auth failed 主要是权限的问题&#xff0c;创建项目的时候选择N/A...

【Java面试丨消息中间件】Kafka

一、kafka是如何保证消息不丢失 1. 介绍 使用kafka在消息的收发过程都有可能会出现消息丢失 &#xff08;1&#xff09;生产者发送消息到broker丢失 &#xff08;2&#xff09;消息在broker中存储丢失 &#xff08;3&#xff09;消费者从broker接收消息丢失 2. 生产者发送消…...

7.数组(一维数组、二维数组、C99中的变长数组、二分查找法)

数组 1.数组的概念2.一维数组2.1 一维数组的创建2.2 一维数组的类型2.3 一维数组的初始化2.4 一维数组的下标2.5 一维数组的输入与输出2.6 一维数组在内存中的存储2.7 利用sizeof()计算数组元素的个数 3.二维数组3.1 二维数组的概念3.2 二维数组的创建3.3 二维数组的初始化3.4 …...

ubuntu服务器配置ftp服务

需求&#xff1a;配置ftp服务用于在windows电脑上直接浏览、下载、上传ubuntu服务器上的文件&#xff0c;用于文件共享&#xff0c;方便实用 效果&#xff1a;用户打开windows资源管理器后输入ftp://xxx.xxx.xxx.xxx &#xff08;公网IP地址&#xff09;后&#xff0c;即可浏览…...

IDA+Frida分析CTF样本和Frid源码和objection模块

文章目录 一些资料IDA调试命令IDA调试安卓的10个技巧objection基本使用 Wallbreaker1frida源码阅读之frida-java 第一个实例EasyJNI第二个实例objection资料 art_trace2.pyart_trace2.js IDAFrida分析CTF样本和Frid源码和objection模块 一些资料 IDA调试命令 adb devices adb…...

ConCurrentHashMap常见面试题

1. JDK1.7和JDK1.8中ConCurrentHashMap的实现有什么不同&#xff1f; JDK1.7中的实现可以认为是大数组套小数组&#xff0c;大数组是Segment数组&#xff0c;小数组是HashEntry数组&#xff0c;锁是锁在大数组的元素上&#xff08;Segment&#xff09;&#xff0c;力度比较大&…...

mysql数据备份并重置

mysql数据备份并重置 1.备份mysql数据 mysqldump -uroot --single-transaction -R -E --databases lc2 cpm a10_goods self_warehouse > /mnt/vdc1/var/lib/mysql/datadir/lc2_cpm_a10_goods_self_warehouse.sql -p Y6B2wb 2.初始化mysql mysqld --initialize; 3.修改配…...

I- yh的线段(2023河南萌新联赛第(四)场:河南大学)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 yh喜欢好线段&#xff0c;好线段即两条线段相交且不与其他线段重合的线段。 两条线段[l1,r1]和[l2,r2]相交(如果存在至少一个x&#xff0c;使得l1≤x≤r1和l2≤x≤r2&#xff0c;则认为两个线段…...

python与深度学习(十四):CNN和IKUN模型二

目录 1. 说明2. IKUN模型的CNN模型测试2.1 导入相关库2.2 加载模型2.3 设置保存图片的路径2.4 加载图片2.5 图片预处理2.6 对图片进行预测2.7 显示图片 3. 完整代码和显示结果4. 多张图片进行测试的完整代码以及结果 1. 说明 本篇文章是对上篇文章猫狗大战训练的模型进行测试。…...

chrome扩展在popup、background、content之间通信解决传输文件问题

文章目录 背景介绍案例介绍代码示例popup页面&#xff0c;上传文件页面popup页面&#xff0c;js上传代码&#xff0c;file文件转base64background监听消息&#xff0c;base64转file文件&#xff0c;axios上传 附-转base64后直接下载 背景介绍 示例扩展API版本MV2。 以弹…...

Oracle获取创建对象的DDL脚本

Oracle获取创建对象的DDL脚本 Oracle获取创建对象的DDL脚本查看 dbms_metadata.get_ddl()函数的定义 Oracle获取创建对象的DDL脚本 例如&#xff0c;对tzq schema下的表 test2&#xff0c;查看DDL脚本的SQL如下&#xff1a; SELECT SELECT dbms_metadata.get_ddl(upper(table…...

《算法竞赛·快冲300题》每日一题:“01树”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 0…...

从ORA-01882看Java时区那些坑:JVM、Docker和Oracle的“三角恋”

从ORA-01882看Java时区那些坑&#xff1a;JVM、Docker和Oracle的“三角恋” 在分布式系统架构中&#xff0c;时区问题就像一颗定时炸弹&#xff0c;随时可能在最意想不到的时刻引爆。当Java应用通过JDBC连接Oracle数据库时&#xff0c;ORA-01882错误就像一个顽固的幽灵&#xf…...

单片机实战:从ADC原理到DAC应用,构建精准数据采集系统

1. 从模拟到数字&#xff1a;ADC基础原理与实战配置 想象一下你正在用温度计测量室温&#xff0c;水银柱停在25.3℃的位置——这就是典型的模拟信号。而单片机作为数字世界的原住民&#xff0c;它只认识0和1。**ADC&#xff08;模数转换器&#xff09;**就是连接这两个世界的桥…...

手把手教你用smarteye搭建多协议视频监控平台(GB28181/RTSP/RTMP全兼容)

实战指南&#xff1a;用SmartEye构建全协议兼容的企业级视频监控平台 当企业IT部门需要整合不同品牌、不同协议的监控设备时&#xff0c;总会遇到各种兼容性难题。海康摄像头的私有协议、大华设备的特殊配置、第三方设备的国标接入需求……这些问题往往让运维团队头疼不已。本文…...

从一次跨域业务中断说起:用Wireshark抓包带你复盘MPLS Option B的故障排查全流程

从一次跨域业务中断说起&#xff1a;用Wireshark抓包带你复盘MPLS Option B的故障排查全流程 那天凌晨3点17分&#xff0c;监控大屏突然跳出红色告警——核心业务系统的跨域交易成功率断崖式下跌至12%。作为网络团队的值班负责人&#xff0c;我立刻意识到这绝非普通故障&#x…...

彻底搞懂「迭代器 Iterator」与「游标 Cursor」—— 同源异路的遍历设计

在日常开发与源码阅读中&#xff0c;迭代器&#xff08;Iterator&#xff09; 和游标&#xff08;Cursor&#xff09; 是两个高频出现的概念。很多人会疑惑&#xff1a;它们到底是不是一回事&#xff1f;有什么区别&#xff1f;又为什么经常被放在一起比较&#xff1f; 本文基于…...

LaTeX排版中文论文时,你踩过这几个坑吗?关于字体、行距和页边距的避坑指南

LaTeX中文排版实战&#xff1a;避开字体、行距与页边距的五大深坑 第一次用LaTeX写中文论文时&#xff0c;我对着屏幕上那堆乱码和错位的格式足足发呆了半小时——明明按照教程一步步操作&#xff0c;为什么标题变成了黑块&#xff1f;为什么行距设置完全无效&#xff1f;如果你…...

SITS2026智能代码生成白皮书深度解读(行业首个L3+可信生成评估框架首次公开)

第一章&#xff1a;SITS2026发布&#xff1a;智能代码生成白皮书 2026奇点智能技术大会(https://ml-summit.org) SITS2026&#xff08;Smart Intelligent Text-to-Source 2026&#xff09;是面向企业级开发场景的下一代智能代码生成框架&#xff0c;首次将多模态语义理解、上…...

终极指南:5个关键步骤实现Python到Android的快速转换

终极指南&#xff1a;5个关键步骤实现Python到Android的快速转换 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址: https://gitcode.com/gh_mirrors/py/python-for-android 你是否曾想过&#xff0c;只需几行Python代码…...

Anthropic自动化对齐研究员:AI自我进化的突破与隐忧

202年4月14日&#xff0c;Anthropic发布了一篇震动AI界的论文《Automated Alignment Researchers》。9个Claude Opus 4.6副本&#xff0c;用5天时间、1.8万美元&#xff0c;在一项AI对齐任务上将人类专家碾压至23% vs 97%的PGR得分。然而更值得关注的是&#xff1a;当这些AI研究…...

基于TR-FRET技术的BCL-xL/VHL PROTAC降解剂在抗肿瘤治疗中的研究

一、BCL-xL靶向治疗面临的挑战BCL-xL是BCL-2家族的重要抗凋亡蛋白&#xff0c;在多种癌细胞中过度表达&#xff0c;是一个具有明确效果的抗肿瘤治疗靶点。然而&#xff0c;BCL-xL也是血小板赖以生存的蛋白&#xff0c;靶向该蛋白的抑制剂往往对血小板产生较大的毒副作用。ABT26…...