扩展程序提供程序未能为该对象返回扩展程序_ABP vNext框架文档解读6-对象扩展...

ABP框架提供了 实体扩展系统, 允许你在无需修改相关类的情况下添加额外属性到已存在的对象 . 它允许你扩展应用程序依赖模块实现的功能,尤其是当你要扩展模块定义的实体和DTO时.

你自己的对象通常不需要对象扩展系统,因为你可以轻松的添加常规属性到你的类中.

IHasExtraProperties 接口

这是一个使类可扩展的接口. 它定义了 Dictionary 属性:

Dictionary ExtraProperties { get; }

然后你可以使用此字典添加或获取其他属性.

基类

默认以下基类实现了 IHasExtraProperties 接口:

  • 由 AggregateRoot 类实现
  • 由 ExtensibleEntityDto, ExtensibleAuditedEntityDto... DTO基类实现.
  • 由 ExtensibleObject 实现, 它是一个简单的基类,任何类型的对象都可以继承.

如果你的类从这些类继承,那么你的类也是可扩展的,如果没有,你也可以随时手动继承.

基本扩展方法

虽然可以直接使用类的 ExtraProperties 属性,但建议使用以下扩展方法使用额外属性.

SetProperty

用于设置额外属性值:

user.SetProperty("Title", "My Title");user.SetProperty("IsSuperUser", true);

SetProperty 返回相同的对象, 你可以使用链式编程:

user.SetProperty("Title", "My Title")    .SetProperty("IsSuperUser", true);

GetProperty

用于读取额外属性的值:

var title = user.GetProperty("Title");if (user.GetProperty("IsSuperUser")){    //...}
  • GetProperty 是一个泛型方法,对象类型作为泛型参数.
  • 如果未设置给定的属性,则返回默认值 (int 的默认值为 0 , bool 的默认值是 false ... 等).
  • 如果属性类型不是原始类型(int,bool,枚举,字符串等),你需要使用 GetProperty 的非泛型版本,它会返回 object.

HasProperty

用于检查对象之前是否设置了属性.

RemoveProperty

用于从对象中删除属性. 使用此方法代替为属性设置 null 值.

最佳实践

为属性名称使用魔术字符串很危险,因为你很容易输入错误的属性名称-这并不安全;

  • 为你的额外属性名称定义一个常量.
  • 使用扩展方法轻松设置你的属性.
public static class IdentityUserExtensions{    private const string TitlePropertyName = "Title";    public static void SetTitle(this IdentityUser use
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值