services requestdelegate net middlewares iservicecollection fundamentals custom asp asp.net startup

asp.net - requestdelegate - middlewares asp net core



¿Cuándo se invoca el método AppInitialize en ASP.NET? (1)

Durante la práctica de personalizar VirtualPathProvider, descubrí que el VirtualPathProvider personalizado puede registrarse en Global.asax o en el método AppInitialize de acuerdo con MSDN http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider .aspx . Sin embargo, MSDN no describe claramente el método AppInitialize.

¿El método de ejecución de ASP.NET invocará automáticamente cualquier método de aplicación estática AppInitialize en la carpeta App_code al inicio?


Si bien hay muy poca documentación sobre el método AppInitialize (), tiene razón al suponer que cualquier clase en su carpeta App_Code que contenga una firma de método como esta:

public static void AppInitialize()

se invocará cuando se inicie la aplicación Asp.Net. Recuerde que App_Code es una carpeta especial para Asp.Net y todo lo que hay adentro se trata de manera un poco diferente. Buena suerte para encontrar documentación sobre todas las pequeñas peculiaridades (como la mencionada anteriormente) de la carpeta App_Code.

Sin embargo, otra cosa para recordar es que solo una clase puede contener una firma para el método AppInitialize () o de lo contrario obtendrá un error de compilación en tiempo de ejecución similar a esto:

El método AppInitialize se define tanto en ''App_Code.SomeClassOne'' como en ''App_Code.SomeClassTwo''.

Entonces, si bien esto es perfectamente válido:

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

Esto generará el error de compilación que mencioné anteriormente:

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

Espero que esto aclare un poco las cosas para ti :)