原文:http://haacked.com/archive/2010/05/16/three-hidden-extensibility-gems-in-asp-net-4.aspx
asp.net 4中,有一部分不为人知的可扩展的api,它们并非是真的背隐藏了--MSDN中有对它们的文档介绍--但是它们很少被提及讨论。现在我们就着重讨论一下它们
PreApplicationStartMethodAttribute
这个属性可以让你的代码在asp.net的处理管道中早于Application_start运行,也早于App_code文件夹中的编译过的代码运行
使用方法:创建一个类库,以assembly级别添加此属性,通常会把这个属性添加到Properties文件夹下的AssemblyInfo.cs文件中,如下:
[assembly: PreApplicationStartMethod(
typeof(SomeClassLib.Initializer), "Initialize")]
需要注意的是,这里面我指定了一个type类型和一个方法,方法必须是没有返回类型没有参数的静态公开方法 public static void。现在,任何一个引用了这个assembly的
asp.net website,当application启动的时候,都会先调用Initialize方法进行一些初始化操作。
public static class Initializer
{
public static void Initialize() {
// Whatever can we do here?
}
}
使用这个特性的主要目的是为了提前执行一些不能在Application_Start中执行的任务(不是不能,而是在Application_Start执行就太晚了),比如:注册build providers或者添加程序集(assembly)的引用
它可以引导我们......
BuildProvider.RegisterBuildProvider
或许你会想,如上所述,如果可以注册build providers,那asp.net 可以很好允许你通过程序注册它们(well ASP.NET better darn well allow you to register them programmatically.,不会翻译)
asp.net 4之前版本,只能通过在web.config文件中修改<buildproviders>配置节实现自定义build provider的注册,而现在,你可以通过调用 BuildProvider.RegisterBuildProvider
.方法实现
BuildProvider.RegisterBuildProvider(".foo", typeof(MyBuildProvider));
PreApplicationStartMethodAttribute配合这个方法调用
,意味着你可以简单的一步完成build provider的安装注册:引用那个自定义的build provider的程序集,程序集会自动为你完成注册。而这在以前,需要首先引用程序集,然后在web.config进行配置.
BuildManager.AddReferencedAssembly
这是asp.net4中的新的方法,可以通过它把一个程序集(assembly)添加到application的程序集引用列表中,这等同于在web.config文件中的<assemblies>配置节
可能你已想到,当注册自定义build provider时,这个迟早会用到。它可以让你把一个引用添加到你的自己定build provider所需的程序集中
这可是另外一种减小web.config文件大小的方法,谁会不喜欢呢