2013-01-09 3 views
24

Ho un progetto sito Web che ho convertito in .NET 4.5. Mi piacerebbe utilizzare lo AuthConfig che ho visto aggiunto alla directory App_Start. Un paio di domandeApp_Start Cartella in ASP 4.5 solo nei progetti WebApplications?

La directory App_Start è disponibile solo per i progetti di applicazione Web? Quando tento di aggiungere una cartella asp.net esistente, non la vedo come un'opzione da aggiungere.

In secondo luogo, è possibile solo un file AuthConfig in qualsiasi punto del progetto del mio sito Web, se questo è il caso?

risposta

2

In breve: Per una comprensione più approfondita delle modifiche di configurazione nei siti Web ASP.NET 4.5, consultare la seguente fonte ufficiale: Configuration Changes in ASP.NET 4.5 Website Templates.

E vi istruirà su ogni cambiamento che è accaduto sulla versione più recente su ASP.NET sito web, che è 4,5

18

Non c'è niente di speciale App_Start, è solo una cartella. La particolarità è il modo in cui viene utilizzata e specifica per il framework WebActivator, che è un pacchetto NuGet che è possibile installare. App_Start e WebActivator non sono specifici di .NET 4.5, ma richiedono NET 4 (che significa VS 2010 o 2012)

Vedi http://blog.davidebbo.com/2011/02/appstart-folder-convention-for-nuget.html

17

La cartella App_Start è stato introdotto come parte dei modelli MVC4. Non c'è niente di speciale a riguardo che faccia in modo che il codice venga eseguito per convenzione. Ad esempio, il modello HotTowel SPA crea la seguente nella cartella App_Start:

TODO diagram

codice nel App_Start viene eseguito da global.asax.cs come illustrato di seguito.

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth(); 
    } 
+1

Dove si riferiscono tutte le classi in Global.asax? Alcuni riferimenti devono essere da qualche parte, non sono referenziati direttamente. – FrenkyB

11

Anche se There is nothing special about App_Start, ma è possibile rendere i file insinde questa cartella viene eseguito quando l'applicazione ha iniziato come Application_Start all'interno Global.asax. Sto usando l'iniettore di dipendenza Ninject nel mio progetto che ha la cartella App_Start. Non v'è alcun file Global.asax nel mio progetto:

enter image description here

ma tutta la configurazione che ho impostato nel NinjectWebCommon file verrà eseguito all'avvio dell'applicazione. NinjectWebCommon ha un contenuto seguente:

using WebFormNinject.Models; 

[assembly: WebActivator.PreApplicationStartMethod(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Start")] 
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Stop")] 

namespace WebFormNinject.App_Start 
{ 
    using System; 
    using System.Web; 

    using Microsoft.Web.Infrastructure.DynamicModuleHelper; 

    using Ninject; 
    using Ninject.Web.Common; 

    public static class NinjectWebCommon 
    { 
     private static readonly Bootstrapper bootstrapper = new Bootstrapper(); 

     /// <summary> 
     /// Starts the application 
     /// </summary> 
     public static void Start() 
     { 
      DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 
      DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); 
      bootstrapper.Initialize(CreateKernel); 
     } 

     /// <summary> 
     /// Stops the application. 
     /// </summary> 
     public static void Stop() 
     { 
      bootstrapper.ShutDown(); 
     } 

     /// <summary> 
     /// Creates the kernel that will manage your application. 
     /// </summary> 
     /// <returns>The created kernel.</returns> 
     private static IKernel CreateKernel() 
     { 
      var kernel = new StandardKernel(); 
      kernel.Bind<Func<IKernel>>().ToMethod(ctx =>() => new Bootstrapper().Kernel); 
      kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>(); 

      RegisterServices(kernel); 
      return kernel; 
     } 

     /// <summary> 
     /// Load your modules or register your services here! 
     /// </summary> 
     /// <param name="kernel">The kernel.</param> 
     private static void RegisterServices(IKernel kernel) 
     { 
      kernel.Bind<IDisplay>().To<MockDisplay>(); 
     }   
    } 
} 

Ero curioso in cui sarà eseguito RegisterServices funzione! Poi ho notato a questa sezione di codice:

[assembly: WebActivator.PreApplicationStartMethod(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Start")] 
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Stop")] 

Questi attributi rendono Start metodo eseguito su richiesta iniziato. Per ulteriori informazioni, consultare WebActivator/PreApplicationStartMethod

+0

Ottimo link che hai trovato sulla spiegazione di WebActivator!+1 per te! – FrankO

+0

Ottima spiegazione. I metodi di "Start" e "Stop" di un file nella cartella App_Start vengono richiamati automaticamente quando vengono specificati gli attributi di assieme. Quelli salvano alcune linee di codice nel file global.asax.cs. –