web-dev-qa-db-fra.com

Dossier App_Start dans ASP 4.5 uniquement dans les projets d'applications Web?

J'ai un projet de site Web que j'ai converti en .NET 4.5 . Je voudrais utiliser le AuthConfig que j'ai vu ajouté au répertoire App_Start . Quelques questions.

Le répertoire App_Start est-il uniquement disponible pour les projets d'application Web ?, Lorsque j'essaie d'ajouter un dossier asp.net existant, je ne le vois pas comme une option à ajouter.

Deuxièmement, est-ce que je peux juste un AuthConfig déposer n'importe où dans mon projet de site web si c'est le cas?

27
TreK

Le dossier App_Start a été introduit dans les modèles MVC4. Il n’ya rien de spécial à ce sujet qui fait que le code y soit exécuté par convention. Par exemple, le modèle HotTowel SPA crée les éléments suivants dans le dossier App_Start:

TODO diagram

Le code dans App_Start est exécuté par global.asax.cs comme indiqué ci-dessous.

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

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

App_Start n'a rien de spécial, c'est juste un dossier. Ce qui est spécial, c'est la façon dont il est utilisé, et cela est spécifique à la structure WebActivator, un paquet NuGet que vous pouvez installer. App_Start et WebActivator ne sont pas spécifiques à .NET 4.5, mais ils requièrent .net 4 (ce qui signifie VS 2010 ou 2012)

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

19
Erik Funkenbusch

Bien que Il n'y a rien de spécial à propos d'App_Start , mais vous pouvez créer des fichiers lorsque ce dossier est exécuté lorsque l'application démarre comme Application_Start dans Global.asax. J'utilise Ninject dependency injector dans mon projet qui a le dossier App_Start. Il y a no fichier Global.asax dans mon projet:

enter image description here

mais toute la configuration que j'ai définie dans le fichier NinjectWebCommon sera exécutée au démarrage de l'application. NinjectWebCommon a le contenu suivant:

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

J'étais curieux de savoir où la fonction RegisterServices sera exécutée! Puis j'ai remarqué à cette section de code:

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

Ces attributs rendent la méthode Start exécutée à l’application démarrée. Pour plus d'informations, consultez WebActivator/PreApplicationStartMethod

12

En bref: Pour mieux comprendre les modifications de configuration dans les sites Web ASP.NET 4.5, consultez la source officielle suivante - Modifications de configuration dans les modèles de site Web ASP.NET 4.5 .

Il vous indiquera chaque changement intervenu sur la nouvelle version du site Web ASP.NET, à savoir la version 4.5.

2
EL Yusubov

Si vous le souhaitez pour configurer votre carte de routage sur les nouveaux modèles MVC 5, vous pouvez définir vos itinéraires sur le fichier Startup.cs dans la méthode Configure.

1
RAUL CARBAJAL