Когда метод AppInitialize вызывается в ASP.NET?
Вопрос
Во время практики настройки VirtualPathProvider я обнаружил, что пользовательский VirtualPathProvider можно зарегистрировать в Global.asax или в методе AppInitialize в соответствии с MSDN http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider.aspx . Однако в MSDN нет четкого описания метода AppInitialize. Р>
Будет ли какой-либо статический метод AppInitialize в папке App_code автоматически запускаться при запуске ASP.NET при запуске?
Решение
Хотя о методе 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;
}
}
Надеюсь, это немного прояснит для вас:)