ASP.Net MVC 控制器初始化其构造函数的时间太长

潘卡伊·达尔维

我使用 Castle Windsor 作为 IOC 使用依赖注入。但是我在控制器类的构造函数中注入了很少的应用程序服务,并且如果这些应用程序服务中的任何一个的构造函数注入了很多项,那么它需要很长时间(长达 20 秒)来触发控制器操作。

您能否在这里提供帮助并提出一些强大的解决方案?

提前致谢!

更新我们在其中一个应用程序服务的构造函数中注入了 20 个存储库和 15 个应用程序服务。让我举个例子来说明:

我有 3 个应用程序服务,比如说 A、B 和 C。这里,C 的构造函数有 25 个项目(20 个存储库和 5 个应用程序服务)注入其 B 的构造函数构造函数中有 35 个项目(25 个存储库和 10 个应用程序服务 - 其中之一它们是 C)在其构造函数中注入 A 的构造函数中注入了 35 个项目(20 个存储库和 15 个应用程序服务 - 其中两个是 B 和 C)注入其构造函数

因此,C 的构造函数被初始化了 3 次(实际情况是 5 次)。这种级联效应导致了问题。至少,我是这么认为的。

对此有何建议?

桑尼·米列诺夫

可能一些(全部?)构造函数所做的不仅仅是将注入的组件分配给私有字段。

此外,注入了 20 个存储库 - 看起来有点矫枉过正。您是否考虑过使用类型化的工厂设施,因此仅注入存储库工厂,并根据需要使用它来解析各个存储库?

public class MyService : IMyService
{
   publiv coid MyService(IRepositoryFactory repoFactory)
   {
       _repoFactory = repoFactory;
   }

   public void SomeMethod(string id)
   {
      var imageRepository = _repoFactory.Get<IImageRepository>(); //or IRepository<Image>() - depends on how your repos are structured
      var image = imageRepository.Get(id);
   }
}

如果可以通过某种方式对服务进行统一,则可以说是相同的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章