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,您可能需要查看他们的文档并找到等效的文档。
我正在使用 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,您可能需要查看他们的文档并找到等效的文档。