.net 如何在Abp中注入积垢前的动作。IRepository<;张力>;

.net 如何在Abp中注入积垢前的动作。IRepository<;张力>;,.net,asp.net-core,aspnetboilerplate,abp,.net,Asp.net Core,Aspnetboilerplate,Abp,我正在使用Volo.abp3.0.4(Abp框架)。我需要在IRepository类中的某些方法之前创建一些操作—CreateAAsync、UpdateAsync等。但我无法覆盖存储库,因为我的客户机应该需要多个操作 这些操作包括获取有关实体的一些信息(tenty)和触发一些操作,以及在真正访问数据库之前记录一些内容。这不是继承的问题,而是组合的问题——我有一系列的动作要做,客户可以选择这些动作 所以我的问题是:我如何能够以一种简单且可扩展的方式实现这一点?谢谢你们 编辑:我想我可以重写我想要的

我正在使用Volo.abp3.0.4(Abp框架)。我需要在IRepository类中的某些方法之前创建一些操作—CreateAAsync、UpdateAsync等。但我无法覆盖存储库,因为我的客户机应该需要多个操作

这些操作包括获取有关实体的一些信息(tenty)和触发一些操作,以及在真正访问数据库之前记录一些内容。这不是继承的问题,而是组合的问题——我有一系列的动作要做,客户可以选择这些动作

所以我的问题是:我如何能够以一种简单且可扩展的方式实现这一点?谢谢你们


编辑:我想我可以重写我想要的方法一次,然后在其中,获取实现接口的所有对象并按顺序运行它们。这是一种很好的方法还是已经实现了什么?

当您对实体进行更改时,会自动触发一些事件,这些事件会发出事件数据对象,这些对象是
EntityCreatingEventData、EntityCreatedEventData、EntityUpdateEventData、EntityUpdateEventData、EntityDeletedEventData、,EntityChangingEventData、EntityChangedEventData

ing”事件(例如EntityUpdate)在提交事务之前触发,而“ed”事件(例如EntityUpdate)在提交事务之后触发

您可以创建EventHandler来订阅这些事件。比如说,

public class MyHandler : ILocalEventHandler<EntityCreatedEventData<IdentityUser>>, ITransientDependency
{
    public async Task HandleEventAsync(EntityCreatedEventData<IdentityUser> eventData)
    {
        var userName = eventData.Entity.UserName;
        var email = eventData.Entity.Email;
        //...
    }
}

.

我是否可以为通用对象创建这些事件,然后将其用于实现接口的实体?是的,您可以发布您选择的任何事件,请在中查看示例。然后使用事件处理程序订阅事件,查看中的示例
public override void ConfigureServices(ServiceConfigurationContext context)
{
    ...
    
    Configure<AbpDistributedEntityEventOptions>(options =>
    {
        //Enable for all entities
        options.AutoEventSelectors.AddAll();
    });
}