Avant de poser ma question, j'ai déjà parcouru les posts suivants:
Voici la disposition des dossiers de mon projet:
Actuellement, il n'y a pas de contrôleur ou de vue. Juste le fichier Owin Startup
.
Startup.cs
using System;
using Microsoft.Owin;
using Owin;
[Assembly: OwinStartup(typeof(Bootstrapper.Startup))]
namespace Bootstrapper
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync(GetTime() + " My First OWIN App");
});
}
string GetTime()
{
return DateTime.Now.Millisecond.ToString();
}
}
}
Web.config
<appSettings>
<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="Bootstrapper.Startup" />
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
J'ai la référence suivante dans le projet Bootstrapper
:
UPDATE: J'ai oublié d'ajouter le message d'erreur:
À présent,
Owin
Startup
dans un projet très basique (comme accéder à Home/Index
)?Owin Startup
est-elle appelée/exécutée?
UPDATE: le 10 déc. 2016
Vérifiez le Project-Folder-Layout
. Dans le projet Bootstrapper
, j'ai le fichier suivant:
IocConfig.cs
[Assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]
namespace Bootstrapper
{
public class IocConfig
{
public static void RegisterDependencies()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
builder.RegisterModule<AutofacWebTypesModule>();
builder.RegisterType(typeof(MovieService)).As(typeof(IMovieService)).InstancePerRequest();
builder.RegisterType(typeof(MovieRepository)).As(typeof(IMovieRepository)).InstancePerRequest();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
}
}
Maintenant, je veux exécuter IocConfig.RegisterDependencies()
dans la classe OWIN Startup
. Je fais using Bootstrapper
dans Startup
en haut, mais cela ne fonctionne pas. Je veux dire que je suis incapable de faire référence à IocConfig
dans Startup
. Comment résoudre ce problème?
Il est un peu tard, mais j'ai trouvé la solution pour placer la classe de démarrage OWIN dans un projet séparé. Tout ce que vous avez fait dans votre projet est correct, vous ne devez appliquer qu'un seul changement dans les propriétés de votre projet Bootstrapper. Cliquez avec le bouton droit sur le projet Bootstrapper, entrez les propriétés, cliquez sur l'onglet Générer et recherchez le chemin de sortie. Vous devriez voir le patch de sortie standard bin\debug \, ce qui signifie que votre dll Bootstrapper atterrira dans ce dossier. Vous devez modifier cela dans le dossier bin, où se trouve votre application Web.
Par exemple, j'ai créé une solution simple avec deux projets, le premier est une application Web vide et le second est une bibliothèque avec la classe de démarrage OWIN. Dans les propriétés du deuxième projet, j'ai modifié le chemin de sortie en ..\OwinTest.Web\bin. Cela causera qu'après la construction toutes les dll atterriront dans un dossier. Vous pouvez maintenant exécuter votre application et OWIN Startup devrait fonctionner correctement.
Voici l'écran des paramètres de propriétés du projet Bootstrapper:
install-package Microsoft.Owin.Host.SystemWeb
)Ici, je vais répondre à votre troisième question. La classe de démarrage est un point d’entrée d’OWIN et est recherchée automatiquement. Comme indiqué dans les documents officiels:
Convention de nommage: Katana recherche une classe nommée Startup dans l'espace de noms correspondant au nom de l'assembly ou à l'espace de noms global.
Notez que vous pouvez également choisir votre propre nom de classe de démarrage, mais vous devez le configurer à l'aide de décorateurs ou d'AppConfig. Comme indiqué ici: https://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection
Voici tout ce dont vous avez besoin pour un test OWIN de base et fonctionnel:
using Owin;
using System;
namespace OwinTest
{
public class Startup
{
public static void Configuration(IAppBuilder app)
{
app.Use(async (ctx, next) =>
{
await ctx.Response.WriteAsync(DateTime.Now.ToString() + " My First OWIN App");
});
}
}
}
Si vous souhaitez utiliser MVC (je suppose que par "Home/Index" vous voulez dire MVC), procédez comme suit:
install-package Microsoft.AspNet.Mvc
).Rendre la page héritée de WebViewPage. Cela devrait ressembler à ceci:
@inherits System.Web.Mvc.WebViewPage
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h1>Owin Hello</h1>
</div>
</body>
</html>
global.asax
pour configurer des itinéraires. Faites un clic droit sur le projet -> ajouter -> Nouvel élément -> Classe d'application globale.Ajoutez la définition des routes à la méthode Application_Start:
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapRoute(name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" });
}