ASP.NET Boilerplate have EventBus system,我们有事件
EntityDeletedEventData
...
但是这些事件在调用SaveChanges()
之后才有效(数据已经存在于DB中)。当尚未将数据写入DB时,我们需要在调用SaveChanges()
之前使用事件系统
我们还需要递归事件系统,例如:
创建对象A =>调用EntityCreatingBeforeSaveEventData(a)=>在此句柄中,我们创建新对象B并调用Repository.Insert(b)=>调用EntityCreatingBeforeSaveEventData(b)... 并且此过程调用时在数据库上下文中存在任何修改。
答案 0 :(得分:1)
entity.Id
在调用SaveChanges()
之前不可能有域事件系统。
SaveChanges()
时检测到更改。Id
且尚未设置(自动生成)的对象。如果您依赖于这样的系统,那么关注点分离可能会很差。
entity.Id
您可以直接使用IEventBus
。
触发事件:
public class AManager : DomainService, IAManager
{
public void CreateA()
{
var a = new A();
Repository.Insert(a);
EventBus.Trigger(new EntityCreatingBeforeSaveEventData<A>
{
Property = a.SomeProperty // Can pass other properties
});
}
}
public class BManager : DomainService, IBManager
{
// Similar to above
}
处理事件:
public class AHandler : IEventHandler<EntityCreatingBeforeSaveEventData<A>>, ITransientDependency
{
public IBManager BManager { get; set; }
public void HandleEvent(EntityCreatingBeforeSaveEventData<A> eventData)
{
var aSomeProperty = eventData.Property;
BManager.CreateB();
}
}