19

在自定义VirtualPathProvider的实践中,我发现自定义的VirtualPathProvider可以注册在Global.asax或者根据MSDN http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider的AppInitialize方法中.aspx。但是,MSDN 并没有明确描述 AppInitialize 方法。

App_code 文件夹中的任何静态 AppInitialize 方法是否会在启动时由 ASP.NET 运行时自动调用?

4

1 回答 1

36

虽然关于 AppInitialize() 方法的文档很少,但您的假设是正确的,即您的 App_Code 文件夹中的任何类都包含这样的方法签名:

public static void AppInitialize()

将在 Asp.Net 应用程序启动时调用。请记住,App_Code 是 Asp.Net 的一个特殊文件夹,其中的所有内容都略有不同。祝你好运找到关于 App_Code 文件夹的所有小怪癖(如前面提到的)的文档。

但是要记住的另一件事是,只有一个类可以包含 AppInitialize() 方法的签名,否则您将在运行时收到类似于以下内容的编译器错误:

AppInitialize 方法在“App_Code.SomeClassOne”和“App_Code.SomeClassTwo”中都定义了。

因此,虽然这是完全有效的:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}

这将产生我上面提到的编译器错误:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}

public class SomeClassTwo
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeTwo"] = DateTime.Now;
    } 
}

我希望这可以为您解决一些问题:)

于 2008-12-01T12:45:23.487 回答