Abp 聚合测试
2019-07-28 22:35 qgbo 阅读(675) 评论(5) 编辑 收藏 举报
Abp 官网开始的教程例子,是IRpositoty<entity> 直接出现在应用层。但是如果是一个聚合根也会这样吗? 那么聚合根是访问仓储的最小单元,要通过聚合根来操作业务,就是实体,那么实体的增删改查,也应该在聚合根里面。
这就就有一个问题,实体继承了聚合根,,他没有仓储,怎么保存呢?
方法一: 依赖注入,这是不行的,这样数据库迁移不成功。
1 public class Order :AggregateRoot, IRepository<Order>, ICreationAudited 2 { 3 [NotMapped] 4 private IRepository<Order> _repository { get; set; } 5 public Order(IRepository<Order> repository) 6 { 7 _repository = repository; 8 } 9 public long? CreatorUserId { get; set; } 10 public DateTime CreationTime { get; set ; } 11 public List<OrderItem> OrderItem { get; set; } 12 public string Remark { get; set; } 13 public Address Address { get; set; } 14 15 public Order Insert(Order entity) 16 { 17 return entity; 18 } 19 }
方法二:继承仓储接口,
public class Order :AggregateRoot, IRepository<Order>, ICreationAudited { public long? CreatorUserId { get; set; } public DateTime CreationTime { get; set ; } public List<OrderItem> OrderItem { get; set; } public string Remark { get; set; } public Address Address { get; set; } public Order Insert(Order entity) { return entity; } }
这样的问题,是应用层怎么调用呢?应用层还是要出现仓储。
方法三:实现聚合根接口,继承仓储类:在代码中是Test2.
public class Test2 : Test2Repository, IAggregateRoot, ICreationAudited { public long? CreatorUserId { get; set; } public DateTime CreationTime { get; set; } public string Remark { get; set; } public ICollection<IEventData> DomainEvents => throw new NotImplementedException(); public int Id { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public bool IsTransient() { throw new NotImplementedException(); } }
这样编译不过去,因为Test2Repository在EF那一层,而Core 是谁也不依赖的,在最下面,这个也是行不通的。
方法四:是这个这个聚合根,再实现一个IOrder 接口,这个接口和仓储接口有重合,在应用层,暴露IOrder 接口就行了。
IOrder可以在应用层依赖注入进去,因为他的postfix 是Order。
泛型方法在调用的时候,可以作为类型传递的(参数或返回值)
这个执行完,不会保存,
上面是3个不可行的,下面有个方法可以
Success方法一:使用属性注入就可以了。注意,要把聚合根放在依赖注入框架中。这个例子是Test
IocManager.Register<Test>(DependencyLifeStyle.Transient);
气功波(18037675651)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言