Dependency injection und ASP.Net die Mitgliedschaft Anbieter
Ich bin in den Prozess der Erstellung einer benutzerdefinierten Mitgliedschaftsanbieter für eine ASP.Net MVC-website. Der Anbieter erstellt wird als eine separate Klasse, die als Teil einer größeren Bibliothek. Es ist eine Notwendigkeit für die back-end-datenspeicher, um flexibel zu sein, wie es sein könnte eine Xml-Datei oder SQL-Datenbank. Mein Erster Gedanke war die Schaffung einer Schnittstelle für die Daten speichern und injizieren diese in Anbieter mit dependency injection.
Das Endergebnis benötigt wird, ist, dass ein Entwickler Erben kann die datenspeicher-Schnittstelle und liefern die erforderlichen Methoden zum aktualisieren der Daten, die dann verwendet werden, die von der benutzerdefinierten Mitgliedschaftsanbieter.
Jedoch durch meinen eigenen Mangel an Fähigkeit, die ich kann nicht herausfinden, wie zu injizieren, die Klasse in der Mitgliedschaft, wenn Sie es auf der website? Was muss getan werden, um die Verknüpfung der Daten speichern die Anbieter? Was wäre der einfachste Weg, um dies zu ermöglichen, die in der website?
- Machen Sie sich vertraut mit jede dependency injection-frameworks?
- Nein. Ich bin nicht auf der Suche nach einen Rahmen. Eine einfache Schnittstelle wird genug sein, für diese spezielle Anforderung. Entwickler sollten in der Lage sein, erstellen Sie Ihre eigenen back-end-Speicher einfach durch Erben von der Schnittstelle.
- Ich denke framework können Sie sparen eine Menge Zeit. Es wird zum injizieren verwendet, spezifische Verwirklichung in der Sie benutzerdefinierten Mitgliedschaftsanbieter, der diese Aufgabe ist die komplexeste, denn Sie können nicht kontrollieren, provider-Initialisierung.
- Fairen Kommentar, aber nicht das, was ich Suche. Den ersten Preis tut es mit der Methode habe ich im Hinterkopf oben. Ich möchte lieber nicht abhängig sein, auf externe frameworks, die mehr dann, was ich brauche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die Konfiguration der benutzerdefinierten Mitgliedschaftsanbieter über das <Mitgliedschaft> - element in der Web.config-Datei, dann sehe ich die Probleme, die Sie haben mit dependency injection.
Den Anbietern erstellt und verwaltet durch den Rahmen, und es gibt keine Möglichkeit Sie abzufangen, dass der Bau um zusätzliche dependency injection für die
IDataStore
- Schnittstelle.Wenn meine Annahme richtig ist, dann, was Sie tun können, ist, überschreiben die
Initialize()
- Methode in Ihrer benutzerdefinierten Anbieter, und tun das dependency injection gibt. Sie können einen benutzerdefinierten Namen/Wert-Einstellung in der Konfiguration des Anbieters, die Punkte auf eine Art implementiert, dassIDataStore
, die übergeben wird als Teil eines Wörterbuchs, um dieInitialize()
Methode.Dann aktivieren Sie eine Instanz der data-store-Typ, und legen Sie es auf die entsprechende Eigenschaft:
Initialize()
aufgerufen werden, indem Sie den Rahmen, nachdem es erstellt eine Instanz von Ihrem provider, so dass der perfekte Ort, um zusätzliche setup-arbeiten wie diese.Für das testen von Szenarios, man muss nur die Daten speichern-Eigenschaft auf der provider-Instanz selbst, wie Sie bauen es direkt in den tests.
Ist das nicht besser? Ich benutze es mit MVC3-und ninject. Es ist genug, um eine Eigenschaft hinzuzufügen, um Ihre benutzerdefinierten Mitgliedschaftsanbieter Klasse. Vergessen Sie nicht, "mit System.Web.Mvc;" auf der Oberseite.
Der einfachste Weg, dies zu tun dependency injection, die ich gesehen habe (und eigentlich die einzige, die ich bisher benutzt habe...) ist ein Konstruktor, der von Ihr abhängigen Klasse nehmen die Schnittstelle als parameter, und weisen Sie es ein eigenes Feld. Wenn Sie möchten, können Sie auch einen "default" - Konstruktor, die Ketten, die erste mit einem default-Wert.
Vereinfacht, es würde in etwa so Aussehen:
Das Konzept nennt sich "Constructor chaining", und es gibt eine Menge von Artikeln auf der web, wie Sie es tun. Ich finde dieses tutorial sehr Begründung des DI-Muster.