You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazored.LocalStorage中使用泛型改造购物车存储逻辑?

实现泛型购物车(基于Blazored.LocalStorage)

1. 改造为泛型购物服务类

将原有的购物车服务改为泛型类,使其支持任意类型的购物项:

public class CartService<T> where T : class
{
    private readonly ILocalStorageService _localStorage;
    public event Action OnChange;

    public CartService(ILocalStorageService localStorage)
    {
        _localStorage = localStorage;
    }

    public async Task AddToCart(T cartItem)
    {
        var cart = await _localStorage.GetItemAsync<List<T>>("cart");
        if (cart == null)
            cart = new List<T>();
        
        cart.Add(cartItem);
        await _localStorage.SetItemAsync("cart", cart);
        
        OnChange?.Invoke();
    }

    // 可按需扩展其他泛型方法,比如获取购物车、移除商品等
    public async Task<List<T>> GetCartItems()
    {
        return await _localStorage.GetItemAsync<List<T>>("cart") ?? new List<T>();
    }
}

2. 注册泛型服务

在Program.cs中完成泛型服务的注册:

builder.Services.AddBlazoredLocalStorage();
builder.Services.AddScoped(typeof(CartService<>));

3. 在组件中使用泛型服务

在Blazor组件中注入对应类型的购物服务,比如针对CartItem类型的使用示例:

@inject CartService<CartItem> CartService

<button @onclick="() => CartService.AddToCart(new CartItem { Id = 1, Name = "示例商品" })">
    添加到购物车
</button>

额外提示

  • 泛型约束where T : class确保T为引用类型,适配LocalStorage的序列化要求
  • 如果需要区分不同类型的购物车,可以修改LocalStorage的存储key,比如用$"cart-{typeof(T).Name}"避免不同类型购物项的数据冲突

内容的提问来源于stack exchange,提问作者キムヨンイン

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:27:27