阿不

潜水

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  212 随笔 :: 0 文章 :: 3078 评论 :: 107万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ASP.NET 4.0在很多方面都做了改进,在这篇ASP.NET 4.0白皮书就描述了很多ASP.NET 4.0的机制改变和改进。在我的博客中,也有几篇关于ASP.NET4.0的特性修改的文章。但是作为一个全新的框架和运行时,内部肯定还会有很多API和扩展点不会暴露的那么明显。比如今天从这篇文章Three Hidden Extensibility Gems in ASP.NET 4的介绍中,我又了解了一些在我平常开发中绝对非常有用的扩展点。

PreApplicationStartMethodAttribute

这个新的Attribute可以让我们指定一个公共的静态函数,让它在站点的Application_Start之前执行该函数。如果你的站点有App_code目录,这个函数同样也会在App_code目录下的代码被编译之前执行。从我的直觉中,这是一个相当有用的扩展点。

我们必须从assembly级别上来使用这个attribute,也就是通常情况下我们会用在AssemblyInfo.cs中:

1
2
[assembly: PreApplicationStartMethod(
typeof(SomeClassLib.Initializer), "Initialize")]

我们需要指定的是类型和类型里面静态函数的名称,这个静态函数必须是不带参数和返回值的公共函数。

这个功能最重要的地方是在于,它可以做一些我们原来在Application_Start无法完成的事情,所以很多事情在执行到Application_Start时已经完成了,不可改变的,比如下面要介绍的关于编译的扩展。

BuildProvider.RegisterBuildProvider

原来我们要注册BuildProvider都是通过添加web.config的<buildproviders>来完成。在ASP.NET 4.0当中,我们就可以配合PreApplicationStartMethodAttribute,在站点启动前添加自定义的来BuildProvider达到目的。

BuildManager.AddReferencedAssembly

在做.ASPX/.ASPCX和App_code目录下的代码文件编译时,需要依赖一些程序集。以前,我们都需要将这些程序集配置在web.config的<assemblies>节点下来完成。现在,你就只需要配合以上的attribute和这个新的方法,直接通过代码的形式来增加这些依赖。

Config-free IHttpModule Registration

这也是对PreApplicationStartMethodAttribute的一个绝对的妙用,在Nikhil Kothari这篇文章中有详细的介绍。它的主要目标,也是脱离Web.config就可以通过代码来注册IHttpModule。

总之虽然只是一个简单的attribute,可是它却非常的有用。当我们开发是一个可复用的框架时,我们不可避免的会需要在程序中做很多相关的配置才能让程序跑起来。而以前,我们就只能要求用户通过Web.config来完成,而当用户少了一个配置就可能会导致整个框架无法运行。如果我们能将这些必须的配置,都在我们的框架内部来完成,这样就可以大大降低框架的使用门槛。

posted on   阿不  阅读(3343)  评论(6编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2006-08-21 无法使用前导 .. 在顶级目录上退出(Cannot use a leading .. to exit above the top directory)
点击右上角即可分享
微信分享提示