在 WCF 上下文之外使用 PerWcfSession 生活方式组件
using PerWcfSession lifestyle component outside of the WCF context
我们使用 Catle Windsor 作为我们的 DI 容器。
我们有处理 wcf 请求的服务器,因此我们使用 PerWcfSession 生活方式注册了注入我们存储库的 DbContext,以便在每次请求后处理该上下文。
在同一台服务器上,我们有另一个线程 运行 单独做一些调度工作,我们希望这个调度程序使用我们拥有的一个存储库,但问题是我们不能重用这个存储库,因为他的DbContext 具有 PerWcfSession 生活方式,调度程序线程不是 WCF request\response 流的一部分。
我想也许在那种情况下我们需要为那个单独的线程提供单独的容器,但我不确定。
有什么想法吗?
我想到了几个选择:
- 将 WCF 服务和调度程序分离到单独的进程中,这样
你最终会得到单独的应用程序
容器和不同的组件生活方式。此外你会
受益于微服务架构,并有专业人士喜欢不同的需求
可扩展性等等(当然也有缺点)。
- 正如您所说,您可能只有一个进程和多个容器
对于每个线程。
- 有一个进程和一个容器,但每个组件的多个注册具有不同的生活方式。比您必须使用服务覆盖来指定特定注册所属的位置(请参阅 https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md 服务覆盖部分)。
我们使用 Catle Windsor 作为我们的 DI 容器。
我们有处理 wcf 请求的服务器,因此我们使用 PerWcfSession 生活方式注册了注入我们存储库的 DbContext,以便在每次请求后处理该上下文。
在同一台服务器上,我们有另一个线程 运行 单独做一些调度工作,我们希望这个调度程序使用我们拥有的一个存储库,但问题是我们不能重用这个存储库,因为他的DbContext 具有 PerWcfSession 生活方式,调度程序线程不是 WCF request\response 流的一部分。
我想也许在那种情况下我们需要为那个单独的线程提供单独的容器,但我不确定。
有什么想法吗?
我想到了几个选择:
- 将 WCF 服务和调度程序分离到单独的进程中,这样 你最终会得到单独的应用程序 容器和不同的组件生活方式。此外你会 受益于微服务架构,并有专业人士喜欢不同的需求 可扩展性等等(当然也有缺点)。
- 正如您所说,您可能只有一个进程和多个容器 对于每个线程。
- 有一个进程和一个容器,但每个组件的多个注册具有不同的生活方式。比您必须使用服务覆盖来指定特定注册所属的位置(请参阅 https://github.com/castleproject/Windsor/blob/master/docs/registering-components-one-by-one.md 服务覆盖部分)。