Вопрос

Во время практики настройки 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;
    } 
}

Надеюсь, это немного прояснит для вас:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top