45

在我看来,Context 类是一个控制台,其对象可以调用任何包含的函数,例如 WCF Ria 服务中的 Datacontext 和 DomainContext。我是否正确理解了这个概念?如果是这样,在什么情况下我需要在自己的类层次结构中创建上下文类?

除了 DataContext,.net 框架还有哪些知名的 Context 类?

4

5 回答 5

57

您可以将上下文视为相关“事物”的包装器,例如 HttpContext、DbContext、ObjectContext。即: HttpContext 包含您可以访问的与 HTTP 相关的操作的任何信息。

DbContext 包含用于数据库通信的方法和属性。对象上下文也是如此。

我会说它是相关事物的占位符或容器。

于 2012-09-03T00:38:24.817 回答
22

对我来说,上下文对象定义了一组绑定到当前执行路径的值和/或函数。换句话说,就像在工作面试的上下文中谈论技术主题与在书呆子晚宴上谈论同一主题不同一样,上下文会根据影响使用代码的运行时环境的因素而变化。这似乎很抽象,但我现在想不出更好的方式来描述它!

.NET 中另一个著名的上下文是HttpContext对象。哪些值会根据正在处理的 Http 操作而改变。例如,网址将更改为HttpContext.Current.Request.Uri. 希望能为您提供上下文:)

于 2012-09-02T23:22:02.203 回答
4

上下文通常是一组动作的存储机制。 HttpContext例如

封装有关单个 HTTP 请求的所有 HTTP 特定信息。

对于您的 WCF 示例,“上下文”是服务。不同的服务有不同的上下文。上下文可以根据需要细化。有些是宽泛的,例如DomainContext,有些是颗粒状的,例如HttpContext

上下文无处不在,当您需要访问或将志同道合的数据或功能设置为可以解耦的事物时,请创建上下文。

所有的上下文都是这样的,它们只是封装了特定动作集的逻辑。

是另一篇描述上下文设计模式的文章。

于 2012-09-03T00:20:17.920 回答
0

根据微软官方解释:

上下文是一个有序的属性序列,它为驻留在其中的对象定义了一个环境。在激活过程中为配置为需要某些自动服务(例如同步、事务、即时激活、安全性等)的对象创建上下文。多个对象可以存在于一个上下文中。

通常根据类的元数据属性选择新对象的上下文。一些重要的上下文类型是:

执行上下文:

这是父上下文,所有其他上下文都是它的一部分。它是 .NET 功能(如 Task)用来捕获和传播上下文的系统,但没有自己的行为。

安全上下文:

在这里,我们可以找到通常仅限于当前线程的任何安全信息。如果您的代码需要以特定用户身份运行,您可能正在模拟该用户,或者 ASP.NET 可能正在为您进行模拟。在这种情况下,模拟存储在 SecurityContext

调用上下文:

这允许程序员存储在逻辑线程的生命周期内应该可用的自定义数据。尽管在很多情况下被认为是不好的做法,但它可以避免过多的方法参数,因为在程序中传递了各种上下文。LogicalCallContext 是一个跨 AppDomain 工作的相关系统。

于 2021-09-14T10:15:06.540 回答
0

在一些 OOP 设计模式中使用了 Context 类,例如: - 状态模式 - 策略模式

于 2020-03-21T16:28:31.110 回答