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

Avalonia Linux环境下AvaloniaLocator.Current不存在及内部属性问题

AvaloniaLocator.Current 内部属性问题的解决方案

你遇到的问题是因为Avalonia 11.x及后续版本调整了API,将AvaloniaLocator.Current改为了内部成员,但旧文档还没同步更新。下面是可行的替代方案:

  • 使用AvaloniaLocator.CurrentMutable替代Current,直接获取服务:

    var assets = AvaloniaLocator.CurrentMutable.GetService<IAssetLoader>();
    if (assets != null)
    {
        var asset = assets.Open(uri);
    }
    
  • 更规范的做法是依赖注入:

    1. 在App.xaml.cs的Initialize方法中确保服务已注册(多数情况下框架会自动注册IAssetLoader):
      public override void Initialize()
      {
          AvaloniaXamlLoader.Load(this);
          // 若框架未自动注册,手动绑定
          AvaloniaLocator.CurrentMutable.Bind<IAssetLoader>().ToSelf();
      }
      
    2. 在需要使用的类(如ViewModel或控件)中通过构造函数注入:
      private readonly IAssetLoader _assetLoader;
      
      public YourClass(IAssetLoader assetLoader)
      {
          _assetLoader = assetLoader;
      }
      
      // 使用时直接调用
      var asset = _assetLoader.Open(uri);
      
  • 若在控件上下文里,也可以通过应用实例获取服务:

    var assetLoader = Application.Current?.Services.GetService<IAssetLoader>();
    if (assetLoader != null)
    {
        var asset = assetLoader.Open(uri);
    }
    

另外注意:Linux环境下文件路径区分大小写,确保你的资源URI(如avares://YourAppName/Assets/folder-icon.png)和实际文件路径完全匹配,避免因大小写问题导致资源加载失败。

内容的提问来源于stack exchange,提问作者Crazy games

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:22:06