Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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
Asp.net 以类似于PerRequestLifetimeManager的方式解析信号器依赖关系_Asp.net_Dependency Injection_Signalr_Unity Container - Fatal编程技术网

Asp.net 以类似于PerRequestLifetimeManager的方式解析信号器依赖关系

Asp.net 以类似于PerRequestLifetimeManager的方式解析信号器依赖关系,asp.net,dependency-injection,signalr,unity-container,Asp.net,Dependency Injection,Signalr,Unity Container,我有一个ASP.NET MVC 4.5 Web API应用程序,在某些情况下也使用Signal。这意味着Web Api控制器和信号集线器可以调用底层业务逻辑 依赖项是使用Unity注入的,我使用PerRequestLifetimeManager设计了应用程序以重用存储库和ApplicationDbContext。由于许多存储库都访问数据库,因此应该限制打开的数据库连接的数量。在控制器中的请求结束时,我调用SaveChanges(),并将受完整请求影响的更改存储在数据库中 这种行为在我使用Web

我有一个ASP.NET MVC 4.5 Web API应用程序,在某些情况下也使用Signal。这意味着Web Api控制器和信号集线器可以调用底层业务逻辑

依赖项是使用Unity注入的,我使用PerRequestLifetimeManager设计了应用程序以重用存储库和ApplicationDbContext。由于许多存储库都访问数据库,因此应该限制打开的数据库连接的数量。在控制器中的请求结束时,我调用SaveChanges(),并将受完整请求影响的更改存储在数据库中

这种行为在我使用Web Api时起作用,但在使用SignalR时我遇到了一些麻烦:我创建了一个混合LifetimeManager,当Http请求存在时,它的行为类似于PerRequestLifetimeManager,当没有Http请求存在时,它的行为类似于TransientLifetimeManager(那么它就是SignalR请求)。问题在于,在signer调用期间创建的各种存储库都会获得自己的ApplicationDbContext实例,而SaveChanges()永远不会在这些存储库上调用

所以,我需要一个像PerRequestLifetimeManager一样工作的终身管理器,但对于Signal。有人能帮我吗?或者我在这里走错了方向,每个存储库是否应该始终获得自己的ApplicationDbContext实例,并在可以持久化更改时调用SaveChanges()本身?我没有这样做,因为我认为我有太多的数据库连接,我希望整个请求都有一个事务