ASP.NET - 创建自定义上下文对象?

标签 asp.net

如何创建一个全局可访问的 Context对象类似于 HttpContext目的?

我想创建一个自定义类库,我想从网站项目中引用它。在网站项目中,我希望能够在全局范围内调用以下内容:

ClassLibraryName.Context

我无法创建全局 property直接在我的类库中,那么这应该如何实现? (我已经看到其他应用程序/产品使用这种方法,其中之一是 Sitecore,它有一个自定义的 Sitecore.Context 对象可用)

编辑

这可能是一个“有效”的解决方案吗?
namespace MyLibrary
{
  public class Context
  {
    public static object ContextualObject
    {
      get;
      set;
    }
  }
}

最佳答案

是的,这并不难实现,如果您总是在 ASP.NET 应用程序的上下文中运行此类,请使用以下方法:

namespace MyLibrary
{
  public class Context
  {
    public static object ContextualObject
    {
      get
      {
           var ctx = System.Web.HttpContext.Current.Items[typeof(Context)];
           if (ctx == null)
           {
               ctx = new Context();
               System.Web.HttpContext.Current.Items.Add(typeof(Context), ctx);
           }

           return ctx;
      }
      set { System.Web.HttpContext.Current.Items[typeof(Context)] = ctx; }
    }
  }
}

本质上包装现有的 HTTP 上下文以提供您自己的服务。这种方法也不会在应用程序存在时存储对象,它只为当前上下文创建它,当响应结束时,它会死亡,并在下一个生命周期中重新生成。如果这不行,请存储对上下文的静态引用。

我在 http://nucleo.codeplex.com 的类库中类似地使用了这种方法。 ,效果很好。

哈。

关于ASP.NET - 创建自定义上下文对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153580/

相关文章:

c# - Resharper:无法在 VS2010 SP1 中解析符号 'Eval'

c# - Umbraco 应用程序 BeginRequest 从未触发

javascript - Jquery 函数不适用于 TextArea

javascript - 在应用程序之间移动时显示进度指示器

c# - $.ajax 返回页面的 HTML 而不是结果

Google Site Search 的 C# 包装器或示例

css - 如何更改 asp.net DropDownList 的字体大小

c# - Repeater 中的按钮不会触发 ItemCommand

ASP.NET MVC 删除操作方法中的查询字符串

asp.net - 如何通过将文件复制到其中来停止 IIS 网站