ASP.NET Web Forms und Identity: Verschieben Sie IdentityModels.cs in ein anderes Projekt

8

Ich versuche, IdentityModels.cs in ein anderes Projekt zu verschieben, um die Website von der Data Access Layer zu trennen.

Ich folgte diesem Tutorial: Ссылка

Und auch diese Frage hier überprüft: Wie verschiebe ich MVC 5 IdentityModels.cs in eine separate Assembly

Aber ich bin immer noch verwirrt, weil IdentityModels auf eine andere Klasse namens ApplicationUserManager verweist, wie Sie unten sehen können:

%Vor%

Als ich zur Suche ging, wo diese Klasse war, fand ich sie im Website-Projekt in einer Klasse in: App_Start / IdentityConfig.cs

%Vor%

Nun, das brachte mich hierher, weil ich wirklich in dem neuen ASP.NET-Identitätsframework verloren bin und ich habe mit wirklich einfachen Dingen gekämpft, die anscheinend nicht so einfach sind.

Wie kann ich das IdentityModel in ein anderes Projekt verschieben, ohne meine Website durcheinander zu bringen?

Einige zusätzliche Daten:

  • Verwenden der VS 2013-Community
  • Verwenden von .NET Framework 4.5.1
Felipe Correa 12.03.2015, 21:00
quelle

1 Antwort

17

Ich habe das heute erfolgreich gemacht, nachdem ich einige Artikel gelesen hatte, die nicht alle Teile zu haben schienen, die ich brauchte. Ich hoffe, das hilft jemand anderem.

Mein Ziel: Modelle aus einem bestehenden Webprojekt in ein anderes Projekt verschieben. Dazu gehören Domänenmodelle, Geschäftslogik und ASP-Identitätsmodelle .

[ BEARBEITEN: Irgendwie habe ich verpasst, dass die Frage für Web Forms war. Ich habe das in MVC gemacht. Ich glaube jedoch, dass die meisten aus einem VS2013-Web-Formular-Projekt folgen würden.]

Schritt für Schritt:

Eine neue Klassenbibliothek zur Lösung mit dem Namen xyz.Models hinzugefügt (xyz ist der Namespace des vorhandenen Webprojekts) - mit etwas anderem wie ModelLib ist es gut, Sie müssen nur später Namespaces suchen / ersetzen, während Sie früher gewonnen haben 't.

Verschieben Sie alle Domänenmodelle aus dem Webprojekt in die Klassenbibliothek. Ich habe die Datenbank Kontext Klasse (Prüfung. XyzContext.cs), alle AspNet ... Modelle und die IdentityModels.cs. Hinweis: Lassen Sie Microsoft's Standard ManageViewModels.cs dort liegen, wo es momentan ist.

Als Nächstes habe ich die ManageViewModels.cs in den ViewModels-Ordner meines Webprojekts verschoben und den Namespace von Models in ViewModels geändert. Die vorhandenen cshtml-Dateien in Views / Manage müssen diese Namespace-Änderung ebenfalls widerspiegeln.

Als Nächstes wird ManageViewModels.cs von ManageController.cs verwendet, also habe ich 'manageController.cs' mit 'xyz.ViewModels' hinzugefügt.

Als nächstes, mit einem leeren Modellordner in meinem Webprojekt, habe ich es aus dem Projekt ausgeschlossen.

Als Nächstes habe ich vom App_Start des Webprojekts die IdentityConfig.cs in die Modellklassenbibliothek verschoben und den Namespace in xyz.Models geändert (auch die Verwendung von "xyz.Models" wurde entfernt) Aussage)

Als Nächstes habe ich die Klassenbibliothek (xyz.Models) als Referenz zum Webprojekt hinzugefügt.

Als nächstes habe ich die folgenden NuGet-Pakete in der Klassenbibliothek installiert

  • Microsoft.AspNet.Identity.EntityFramework
  • Microsoft.AspNet.Identity.Owin
  • Microsoft.Owin (Ich habe gerade die neueste Version von NuGet, die war etwas neuer und zwang mich, die bestehende Referenz auf dem aktualisieren Webprojekt - einfach mit NuGets Manage Packages & gt; Update)

Das Folgende trifft vielleicht nicht auf Ihr Projekt zu, aber das sind andere Dinge, die ich in der Klassenbibliothek basierend auf einigen Geschäftslogikklassen benötigte:

  • Eine Referenz auf System.Web.Mvc

  • Eine Referenz zu ' System.Web ' - Hinweis: Es war notwendig, ein Projekt hinzuzufügen Verweis auf System.Web, weil ich HttpContextBase verwendet habe, HttpContext in der Klassenbibliothek (das war zunächst verwirrend Meine Klasse hatte bereits eine "using System.Web" -Anweisung. Ich werde nicht raushacken warum hier, aber stellen Sie sicher, dass Sie "System.Web" in Ihrem Projekt haben Verweise (System.Web.Mvc allein nicht).

Ich änderte dabei "DefaultConnection" in meiner "IdentityModels.cs" in den Datenbankkontext, den ich für meine anderen verwende () und löschte den Verweis in der web.config meines Webprojekts für DefaultConnection ; "XyzContext" beibehalten.) Anmerkung: Alle Tabellen sind in derselben db .

%Vor%

An diesem Punkt gab mir das Kompilieren einen ' GetOwinContext ' Fehler in einer meiner benutzerdefinierten Klassen, die ich für die Zentralisierung einiger Geschäftslogiken von Aspnet Identity erstellt hatte. Um dies zu beheben, benötigte ich ein anderes NuGet-Paket in meiner Klassenbibliothek: Microsoft.Owin.Host.SystemWeb .

Alles hat danach gut funktioniert.

    
puddleglum 08.04.2015, 15:57
quelle