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

ASP.Net MVC Controller takes too long to initialize its constructor

我正在使用 Castle Windsor 作为 IOC 使用依赖注入。但是无论我在控制器 class 的构造函数中注入了多少应用程序服务,如果这些应用程序服务中的任何一个的构造函数注入了很多项,那么它就会花费很长时间(长达 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 个存储库 - 看起来有点过分了。您是否考虑过使用 typed factory facility,因此您只注入一个存储库工厂,并根据需要解析使用它的各个存储库?

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);
   }
}

服务也可以这样说,如果它们可以某种方式统一的话。

控制器初始化速度变慢的原因之一可能是当您有很多依赖项时,这些依赖项又将依赖项注入到它们的构造函数中等等。

我在使用 Simple Injector 时遇到了这个问题。因此,对我有用的解决方案是在某些情况下将 Lifestyle 更改为 Singleton。

对于 Castle Windsor,您可能需要查看他们的文档并找到等效的文档。