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

从Catel 5.12升级至6.0.3遇到的编译错误及文档缺失问题

Catel 5.x 升级到 6.0.3 Core 编译错误解决方案

1. AutoRegisterTypesViaAttributes 属性不存在

Catel 6.x 重构了服务注册逻辑,移除了原ServiceLocatorConfiguration中的AutoRegisterTypesViaAttributes属性。替代方案:

  • 手动通过TypeFactory注册类型:使用TypeFactory.Default.RegisterType<IType, ConcreteType>()逐个注册
  • 若需批量扫描注册,可借助TypeScanner扫描程序集,再批量注册带有自定义标记的类型(原属性自动注册逻辑需自行实现)

2. ServiceLocatorRegistration 并非属性类

Catel 6.x 彻底移除了ServiceLocatorRegistrationAttribute,不再支持通过属性标记自动注册类型。现在需直接通过服务定位器的API注册:

ServiceLocator.Default.RegisterType<IService, ServiceImplementation>();

如果使用依赖注入容器集成(如.NET Core DI),可通过容器的注册API替代。

3. ViewModelBase 缺失带旧值/新值的RaisePropertyChanged重载

Catel 6.x 简化了ViewModelBase的RaisePropertyChanged方法,移除了带旧值、新值的重载。替代方案:

  • 使用SetProperty方法自动处理属性变更,该方法内部会自动跟踪旧值并触发变更通知:
    private string _name;
    public string Name
    {
        get => _name;
        set => SetProperty(ref _name, value);
    }
    
  • 若需手动处理旧值和新值,可在属性setter中先保存旧值,调用RaisePropertyChanged后自行处理:
    private string _name;
    public string Name
    {
        get => _name;
        set
        {
            var oldValue = _name;
            _name = value;
            RaisePropertyChanged(nameof(Name));
            // 此处可使用 oldValue 和 value 做自定义逻辑
        }
    }
    
  • 也可订阅ViewModelBase的AdvancedPropertyChanged事件,该事件的参数会包含旧值和新值。

关于变更文档

Catel 6.x 属于重大版本重构,部分旧文档未及时同步更新。可参考官方GitHub仓库的release notes和迁移相关issue获取更准确的变更细节。

内容的提问来源于stack exchange,提问作者John Baur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:12:11