MST

星途 面试题库

面试题:C# 在 Blazor WebAssembly 应用中的依赖注入

在 Blazor WebAssembly 应用里,依赖注入是如何实现的?请举例说明如何注册不同生命周期(Singleton、Scoped、Transient)的服务,并阐述每种生命周期在 Blazor WebAssembly 应用场景中的适用情况。
37.6万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

1. Blazor WebAssembly 中依赖注入的实现方式

Blazor WebAssembly 使用了.NET 的依赖注入容器 Microsoft.Extensions.DependencyInjection。在 Blazor WebAssembly 项目的 Program.cs 文件中进行服务的注册与配置。

2. 注册不同生命周期服务的示例

Singleton 生命周期服务注册

Singleton 生命周期意味着在整个应用程序的生命周期内,只有一个实例被创建。

builder.Services.AddSingleton<IMySingletonService, MySingletonService>();

这里 IMySingletonService 是接口,MySingletonService 是实现该接口的类。

Scoped 生命周期服务注册

Scoped 生命周期表示在每一个作用域(通常是一次请求)内,只会创建一个实例。在 Blazor WebAssembly 应用中,由于应用是客户端运行,这里的作用域通常与组件树的一部分相关。

builder.Services.AddScoped<IMyScopedService, MyScopedService>();

Transient 生命周期服务注册

Transient 生命周期表示每次请求服务时都会创建一个新的实例。

builder.Services.AddTransient<IMyTransientService, MyTransientService>();

3. 每种生命周期在 Blazor WebAssembly 应用场景中的适用情况

Singleton

  • 适用场景:适用于那些需要在整个应用中保持状态且资源消耗较小的服务,例如配置读取服务,因为应用的配置在运行期间通常不会改变,使用单例可以确保整个应用获取到的配置是一致的。

Scoped

  • 适用场景:适合与特定用户会话或组件树相关的服务。比如用户身份验证服务,在用户的会话期间,身份验证状态应该保持一致,且不同用户之间的身份验证状态相互独立。

Transient

  • 适用场景:适用于那些无状态且创建成本较低的服务。例如日志记录服务,每次记录日志时都可以创建一个新的实例,不用担心状态共享问题,并且由于创建成本低,频繁创建新实例不会带来性能问题。