gpt4 book ai didi

c# - 每个请求的依赖注入(inject)容器

转载 作者:行者123 更新时间:2023-11-30 15:49:40 25 4
gpt4 key购买 nike

为 ASP.NET 应用程序创建依赖注入(inject)容器是很常见的,这样它就可以在应用程序运行时运行。

我在每个请求中创建 DI 容器并在请求结束时释放它。
主要目的是任何 DI 容器都支持在处理容器时处理对象。


附加:如果我需要在请求之间共享资源 (NHibernate SessionFactory),我只需将它们保存在一个静态变量中,并将该值封装在每个请求的对象中。像这样:

public class SessionFactoryAggregator : ISessionFactory {
static ISessionFactory actualFactory;

// Implement ISessionFactory and proxy calls to the actualFactory
}

这只是模拟的单例模式。


我的问题:

  1. 这样做可以吗?
  2. 如果不是,为什么以及应该做什么?
  3. 此方法有任何已知的性能问题吗?

更新:目前我通过自己的 DI 提供程序抽象使用 CaSTLe Windsor,因此实际容器是可插入的。

谢谢。

最佳答案

如果它适合你,那就没问题:)

由于 Web 应用程序的无状态特性,这样做不会给您带来任何功能问题,因为您只需为每个请求提供一个容器,并且多个实例将简单地相互独立。

然而,从可扩展性的角度来看,这可能不是最有效的方法(但请记住,您应该衡量性能而不是猜测),因为应用程序会经常连接和拆除资源的共享。

大多数 DI 容器都具有管理对象生命周期的能力,其中大部分甚至是 Web 感知的,这意味着您应该能够告诉它某些组件具有“按请求”的生命周期并且它们应该是在每个请求后处理。

这将允许您将其他组件作为单例(生命周期模式,而不是创建模式)保持事件状态,以便它们可以在多个请求之间共享。对于通常线程安全的数据访问组件来说,这通常是个好主意,因为它们不持有可变状态。

关于c# - 每个请求的依赖注入(inject)容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com