2013-01-09 5 views
24

Mam projekt strony internetowej przekonwertowałem na .NET 4.5. Chciałbym skorzystać z AuthConfig, który widziałem dodany do katalogu App_Start. Kilka pytań.App_Start Folder w ASP 4.5 tylko w projektach aplikacji WWW?

Czy katalog App_Start jest dostępny tylko dla projektów aplikacji sieci Web ?, Kiedy próbuję dodać istniejący folder asp.net, nie widzę go jako opcji do dodania.

Po drugie, czy w takim przypadku mogę wykonać tylko plik AuthConfig w dowolnym miejscu mojego projektu strony internetowej?

Odpowiedz

2

W skrócie: Dla głębszego zrozumienia zmian konfiguracyjnych w ASP.NET 4.5 strony, spojrzeć na poniższym oficjalnego źródła - Configuration Changes in ASP.NET 4.5 Website Templates.

To poinstruuje cię na każdej zmianie, co wydarzyło się na nowszej wersji ASP.NET na stronie internetowej, która wynosi 4,5

18

Nie ma nic szczególnego w App_Start, to tylko folder. Szczególne znaczenie ma to, w jaki sposób jest ono używane, i jest to specyficzne dla struktury WebActivator, która jest pakietem NuGet, który można zainstalować. App_Start i WebActivator nie są specyficzne dla .NET 4.5, ale wymagają .NET 4 (co oznacza, VS 2010 lub 2012)

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

17

Folder App_Start został wprowadzony jako część szablonów MVC4. Nie ma w tym nic specjalnego, co powoduje, że kod jest wykonywany w konwencji. Na przykład, szablon HotTowel SPA tworzy następujące w folderze App_Start:

TODO diagram

kod w App_Start jest wykonywany przez Global.asax.cs jak pokazano poniżej.

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

Gdzie znajdują się wszystkie wymienione klasy w pliku Global.asax? Niektóre odniesienia muszą być gdzieś, nie są bezpośrednio przywoływane. – FrenkyB

11

Chociaż There is nothing special about App_Start, ale można tworzyć pliki insinde ten folder wykonuje podczas uruchomienia aplikacji jak Application_Start wewnątrz Global.asax. Korzystam z wtryskiwacza zależnego Ninject w moim projekcie, który ma folder App_Start. Jest żaden plik Global.asax w moim projekcie:

enter image description here

ale konfiguracja mam ustawione w NinjectWebCommon pliku zostanie wykonany po uruchomieniu aplikacji. NinjectWebCommon ma następującą treść:

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>(); 
     }   
    } 
} 

byłem ciekaw gdzie RegisterServices funkcja zostanie wykonana! Wtedy zauważyłem do tej części kodu:

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

Te cechy sprawiają Start metoda wykonywana na wniosek zaczęło. Aby uzyskać więcej informacji, spójrz na stronę WebActivator/PreApplicationStartMethod

+0

Świetny link znaleziony o wytłumaczeniu WebActivator!+1 dla Ciebie! – FrankO

+0

Świetne wyjaśnienie. Metody "Start" i "Stop" pliku w folderze App_Start są wywoływane automatycznie po określeniu atrybutów zespołu. Te zapisują niektóre linie kodu w pliku global.asax.cs. –