【发布时间】:2014-10-01 09:57:19
【问题描述】:
在尝试了解多租户环境的工作原理时,我想到了 WorkContext 的概念。
简介:
在多租户环境中,租户是共享相似功能的客户端,并在 ROOT 应用程序的单个实例下运行。为了能够添加特定于租户的功能,我得出了一个结论,即 依赖注入 是适合我的情况的解决方案。
每个租户都应该有自己的 IoC 容器,以便能够在运行时解决其依赖关系。
但是在尝试实施该理论时,我在包装所有租户特定数据方面遇到了一些麻烦。
在挖掘互联网时,似乎必须存在某种 TenantContext。所以每个租户都有自己独立的上下文。
问题是我不明白这样一个 Context 的真正 LifeCycle。
问题一:
什么是特定于租户的 WorkContext 的生命周期图,我应该将它存储在哪里,应该何时创建/处置它?
注意:如果提供了问题1,则无需回答上述问题。
突然间,我发现果园计划似乎是真正的杰作。在 Orchard 内部,我所说的 Context 叫做WorkContext。
我正在尝试理解 Orchard Project 中 WorkContext 的概念。据我了解,以下是关于 WorkContext 的一些想法:
- WorkContext 是每个请求的生命周期对象。
- 存储在
HttpContext.Items中(也有线程静态实现..)。 - 它封装了租户 IoC 范围(ShellContext -> ShellContainer)。
- 通过
IWorkContextAccessor访问。
我不明白的是:
问题2:
为什么我们需要在路由的 DataTokens 中包含 IWorkContextAccessor 实例,如下所示:routeData.DataTokens["IWorkContextAccessor"] = _workContextAccessor;?这真的有必要吗?
【问题讨论】:
标签: asp.net-mvc orchardcms multi-tenant