我使用 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] 删除。
我来说两句