Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DbContext中的EventHandler_C#_.net Core_Dbcontext - Fatal编程技术网

C# DbContext中的EventHandler

C# DbContext中的EventHandler,c#,.net-core,dbcontext,C#,.net Core,Dbcontext,我想从DbContext重写saveChangesSync方法。大概是这样的: public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default) { DatabaseChanged?.Invoke(this, EventArgs.Empty); return base.SaveChangesAsync(); } public override Task

我想从DbContext重写saveChangesSync方法。大概是这样的:

public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
    DatabaseChanged?.Invoke(this, EventArgs.Empty);
    return base.SaveChangesAsync();
}
public override Task savechangessync(CancellationToken CancellationToken=default)
{
DatabaseChanged?.Invoke(此为EventArgs.Empty);
返回base.saveChangesSync();
}
问题是,如果订阅此事件,DbContext将擦除订阅,因为它是一个作用域服务,并且它将在任何需要的地方创建一个新实例。
如何从另一个类订阅此事件?

调用
savechangesync()
时,是否有理由不能只注入需要调用的内容?DatabaseChanged是一个事件。我想知道数据何时更改,但您在这里手动调用事件(如果有订阅者),您可以通过DI执行完全相同的操作,而不会出现此问题。如果您有一些处理程序接口,您可以插入一个例如
IEnumerable
,然后如果有,依次调用每个接口。您正面临一场艰难的战斗,试图让事件与web应用程序中的作用域服务一起放置nice,DI是前进的方向。如果我错了,请纠正我。我只需要创建一个包含EventHandler的服务,并将其注入DbContext(以便能够引发事件),无论我需要在哪里订阅eventNo,我的意思是根本不使用事件,使用DI注入处理程序,只需循环并调用它们。与其创建事件处理程序,不如将其(+=)订阅到DbContext事件,然后调用该事件,定义一个接口并创建实现它的处理程序,然后注入并调用这些处理程序。不需要任何活动!