摘要:
使用 HttpClient 类 首先创建一个新的 Blazor WASM 项目(启用托管),就像您在第一章中创建的一样(称为 Blazor.Communication)。 您将使用此项目来检查为您创建的模板。 您将从查看解决方案的服务器端开始,然后是共享项目的代码,然后是客户端。 检查服务器项目 查 阅读全文
摘要:
从 C# 调用 JavaScript 浏览器具有许多您可能希望在 Blazor 网站中使用的功能。 例如,您可能希望使用浏览器的本地存储来跟踪某些数据。由于 Blazor 的 JavaScript 互操作性,这很容易。 提供胶水功能 要调用 JavaScript 功能,首先要在 JavaScript 阅读全文
摘要:
单页应用程序 SPA 是一种 Web 应用程序,它可以替换 UI 的某些部分,而无需重新加载整个页面。 SPA 使用 JavaScript 来实现对浏览器控制树的这种操作,也称为文档对象模型 (DOM),其中大多数由固定的 UI 和占位符元素组成,其中内容根据用户单击的位置被覆盖。 使用 SPA 的 阅读全文
摘要:
单元测试 Blazor 组件 让我们为 Blazor 应用程序创建几个测试。 在本章的代码下载中,您可以找到测试解决方案。 用你最喜欢的编辑器打开它。 项目中的所有内容都应该看起来很熟悉。 有 Counter 组件和 FetchData 组件,它们使用 IWeatherService 从服务器检索天 阅读全文
摘要:
了解 HTTP 在谈论 REST 之前,您应该对超文本传输协议(也称为 HTTP)有一个很好的了解。 HTTP 由 CERN 的 Tim Berners-Lee 于 1989 年创建。CERN 是基础物理研究中心,研究人员完成研究后会做什么? 他们用他们的研究成果发表论文。 在互联网出现之前,发表论 阅读全文
摘要:
了解依赖倒置 想象一个使用服务类的 ProductList 组件,该组件使用 new 运算符创建服务,如清单 5-1 所示。 清单 5-1 使用 ProductsService 的组件 @using Dependency.Inversion.Shared @foreach (var product 阅读全文
摘要:
使用模板化组件 组件是 Blazor 的重用构建块。 在 C# 中,泛型被大量用于重用; 想想你在泛型中使用的所有集合,比如 List<T>。 如果 Blazor 有类似通用组件的东西会不会很酷? 是的,Blazor 可以! Blazor 支持模板化组件,您可以在其中指定一个或多个 UI 模板作为参 阅读全文
摘要:
什么是 Blazor 组件? 简单来说,Blazor 中的每个 razor 文件都是一个组件。 就是这么简单! Blazor 中的 razor 文件包含标记,并且在 @code 部分中有代码。 我们在 MyFirstBlazor 项目中使用的每个页面都是一个组件! 并且可以通过将其他组件添加为子组件 阅读全文
摘要:
快速了解 Razor Blazor 是 Browser + Razor 的组合(具有很大的艺术自由度)。 因此,要了解 Blazor,我们需要了解浏览器和 Razor 语言。 我假设您了解什么是浏览器,因为互联网已经非常流行了几十年。 但是 Razor(作为一种计算机语言)可能还不是那么清楚。 Ra 阅读全文
摘要:
您第一个Blazor项目 使用 Dotnet CLI 生成项目 要使用可在任何机器上运行的 dotnet CLI 生成项目,请首先打开命令行,然后将当前目录更改为您要创建项目的任何位置。 现在执行以下命令来创建一个新的 Blazor WebAssembly 项目。 dotnet 是命令行,采用新指令 阅读全文
摘要:
Microsoft.Extensions.DependencyInjection DI容器(DI Container) 随着ASP.NET Core的引入,Microsoft引入了自己的DI容器(DI Container)Microsoft.Extensions.DependencyInjectio 阅读全文
摘要:
在上一章中,我们介绍了由Nicholas Blumhardt于2007年创建的Autofac DI容器(DI Container)。三年后,Steven创建了Simple Injector,我们将在本章中进行研究。 与上一章中的Autofac一样,我们将给予Simple Injector相同的处理方 阅读全文
摘要:
在前面的章节中,我们讨论了总体上适用于DI的模式和原理,但是除了一些示例之外,我们还没有详细研究如何使用任何特定的DI容器(DI Container)应用它们。 在本章中,您将看到这些整体模式如何映射到Autofac。 您需要熟悉上一章中的内容,才能从中充分受益。 Autofac是一个相当全面的DI 阅读全文
摘要:
DI容器 本书的先前部分是关于一起定义DI的各种原理和模式的。 如第3章所述,DI容器是一个可选工具,可用于实现许多通用基础结构,如果使用Pure DI,则必须实现这些基础结构。 在整本书中,我们始终将讨论容器保持不可知状态,这意味着我们只教了您Pure DI。 请勿将其解释为Pure DI本身的建 阅读全文
摘要:
本章是我们从第10章开始的面向方面编程(AOP)讨论的延续。第10章以最纯粹的形式描述了AOP,即仅使用SOLID设计实践应用AOP,本章从工具着手研究AOP。基础的观点。 我们将讨论两种应用AOP的常用方法:动态拦截和编译时编织。 如果第10章的设计方法过于激进,那么动态拦截将是您的下一个最佳选择 阅读全文
摘要:
在家做饭和在专业厨房工作之间有很大的区别。在家里,您可以花所有时间准备菜,但是在商用厨房中,效率是关键。Mise到位是此方面的重要方面。 这不仅仅是提前准备原料;这是关于设置所有必需的设备的信息,包括您的锅,平底锅,砧板,品尝勺以及工作空间中必不可少的任何内容。 厨房的人体工程学和布局也是影响厨房效 阅读全文
摘要:
拦截(Interception) 关于烹饪的最有趣的事情之一是,您可以将许多成分组合在一起,而这些成分本身并不是特别美味,它们的总和要大于各个部分的总和。 通常,您会从简单的食材开始,为餐点打下基础,然后对其进行修饰和修饰,直到最终得到美味的菜肴。 考虑小牛肉片。 如果您绝望了,可以生吃,但是在大多 阅读全文
摘要:
对象生命周期(Object lifetime) 时间的流逝对大多数食物和饮料都有深远的影响,但后果却各不相同。 就个人而言,我们发现12个月大的Gruyère比6个月大的Gruyère有趣,但Mark希望他的芦笋比任何一种都新鲜。在许多情况下,评估一件物品的适当年龄很容易; 但是在某些情况下,这样做 阅读全文
摘要:
Pure DI 在第一章中,我们简要介绍了DI的三个方面:对象组合(Object Composition),生命周期管理(Lifetime Management)和拦截(Interception)。在本书的这一部分,我们将深入探讨这些维度,为每个维度提供各自的章节。许多DI容器(DI Contain 阅读全文