Wann und wie wird die Konfiguration Methode in OwinStartup Klasse wird aufgerufen/ausgeführt?
Bevor ich meine Frage, die ich bereits durchgemacht haben, die folgenden Beiträge:
- Kann nicht Holen Sie sich die OWIN Startup class to run in IIS Express nach
umbenennen ASP.NET Projekt
Datei und alle Beiträge in der Frage genannten. - OWIN Startup-Erkennung
- OwinStartupAttribute gefordert in web.config auf den richtigen Server-Fehler #884
- OWIN Startup class nicht
erkannt
Hier ist mein Projekt-Ordner-layout:
Derzeit gibt es keine controller oder view. Nur die Owin Startup
Datei.
Start.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>
Ich habe die folgende Referenz in der Bootstrapper
Projekt:
- Microsoft.Owin
- Microsoft.Owin.Host.SystemWeb
- Owin
- System
- System.Kern
UPDATE:
Vergaß hinzuzufügen, die Fehlermeldung:
Nun,
- WARUM ist es nicht?
- Was ist die Schritt-für-Schritt-Prozess, hinzufügen und mit einem
Owin
- Klasse in ein sehr basic-Projekt(wie der Zugriff auf
StartupHome/Index
)? - Wann und wie wird die Konfiguration Methode in
Owin Startup
Klasse ist
aufgerufen/ausgeführt?
UPDATE: am 10-Dec-2016
Überprüfen Sie die Project-Folder-Layout
. In Bootstrapper
Projekt habe ich die folgende Datei:
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));
}
}
}
Nun will ich ausführen IocConfig.RegisterDependencies()
im OWIN Startup
Klasse. Ich mache using Bootstrapper
im Startup
an der Spitze, aber es funktioniert nicht. Ich meine, ich bin keine Referenz IocConfig
im Startup
. Wie man dieses Problem beheben?
InformationsquelleAutor Vedant | 2016-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein bisschen spät, aber ich fand die Lösung, wie man OWIN Startup class, die in separaten Projekt. Alles, was Sie getan in Ihrem Projekt der richtige ist, müssen Sie nur anwenden, eine änderung in den Eigenschaften des Bootstrapper-Projekt. Klicken Sie rechts auf Bootstrapper-Projekt, geben Sie Eigenschaften, klicken Sie auf Registerkarte "Erstellen" und suchen Sie nach Output-Pfad an. Sie sollten sehen, standard-output-patch-bin\debug\ das bedeutet, dass Ihr Bootstrapper dll landen in diesem Ordner. Sie müssen dies ändern, um den bin-Ordner, wo Sie Ihre komplette web-app ist.
Beispielsweise habe ich schon erstellt, die einfache Lösung mit zwei Projekten, das erste ist eine leere web-app, und die zweite ist eine Bibliothek, die mit OWIN Startup class. In den Eigenschaften von dem zweiten Projekt, das ich geändert habe, der Ausgabe-Pfad auf ..\OwinTest.Web\bin. Dies wird dazu führen, dass nach dem build alle dlls landet in einem Ordner. Nun können Sie Ihre app und OWIN Startup sollte richtig funktionieren.
Unten ist die Bildschirm-Eigenschaften-Einstellungen des Bootstrapper-Projekt:
Ehrlich gesagt, ich weiß nicht genau, aber ich habe festgestellt, dass dies die Antwort auf eine Frage, was ist bootstrapping: stackoverflow.com/a/1255796/3872681. Basierend auf dieser Antwort ich denke, dass bootstrapping in web-apps laden alle Helfer frameworks, wie zum Beispiel IoC-Container oder ASP.NET Identity module bevor die eigentliche Anwendung gestartet wird, so OWIN selbst ein bootstraper. Daher das Projekt, wo Sie zog OWIN startup-Datei heißt bootstrapper denn es hält alle OWIN-Module, nicht weil Sie bootstrapped OWIN es. Aber ich bin mir nicht 100% sicher.
InformationsquelleAutor Roman Suska
install-package Microsoft.Owin.Host.SystemWeb
)Hier werde ich die Antwort auf Ihre Dritte Frage. Die startup class ist ein Einstiegspunkt von OWIN und sah automatisch auf. Wie bereits in offiziellen docs:
Beachten Sie, dass Sie können auch wählen Sie Ihre eigenen Namen der Start-Klasse, aber Sie haben, um diese mit Hilfe von Dekoratoren oder AppConfig. Wie hier angegeben:
https://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection
Dies ist alles, was Sie brauchen für eine grundlegende und arbeiten OWIN-test:
Wenn Sie möchten, verwenden Sie MVC (ich denke mal von "Home/Index" meinst du, MVC), gehen Sie folgendermaßen vor:
install-package Microsoft.AspNet.Mvc
).Machen die Seite Erben von WebViewPage. Das ganze sollte wie folgt Aussehen:
global.asax
zu Routen einrichten. Rechtsklick auf das Projekt -> hinzufügen -> New Item -> Global Application-Klasse.Fügen Sie die Routen-definition der Application_Start-Methode:
Richtig. Und nicht nur die Startup-Klasse, aber auch OWIN ist NuGet-Pakete.
Die Präsentationsschicht sollte eine Haupt-web-front-end mit OWIN und MVC. Zusätzliche business-Logik und Daten-layer oder Infrastruktur kann eine separate service-Bibliothek. Diese zusätzlichen Projekte enthalten den code. Innerhalb der OWIN sollten Sie immer nur nenne, was gebraucht wird. Wenn einzelne OWIN-middleware würde kompliziert sich selbst - man kann immer den code in separate Klasse, und verwenden Sie nur
app.Use<MyClass>()
statt. Der Schlüssel für ein erfolgreiches Projekt ist immer Schlichtheit und einer sauberen, eleganten code. Die Trennung von Bedenken.Vielen Dank für Ihre Zeit und Hilfe. Ich weiß es zu schätzen wissen. 🙂
Sicher nicht. Check this: stackoverflow.com/questions/14115497/... auch dies: stackoverflow.com/questions/19781970/... und nicht zuletzt - mit neuen ASP.NET Kern, es ist in-built IoC scheint als die beste option in Ihrem Fall. Obwohl ich nicht sicher bin, ob Sie mit neuen .NET Core.
InformationsquelleAutor Ivan Sivak