Ich habe eine ASP.NET MVC-Webanwendung, die einen benutzerdefinierten Mitgliedschaftsprovider implementiert. Der benutzerdefinierte Mitgliedschaftsanbieter verwendet eine UserRepository
für seinen Konstruktor, der eine Schnittstelle zwischen dem Mitgliedschaftsprovider und NHibernate bereitstellt. Der UserRepository
wird vom Ninject IoC Container bereitgestellt.Dependency Injection mit benutzerdefinierten Mitgliedschaftsanbieter
Offensichtlich funktioniert dies jedoch nicht, wenn der Provider von .NET instanziiert wird: Der parameterlose Konstruktor verfügt über kein UserRepository und kann kein UserRepository erstellen (das UserRepository erfordert die Übergabe einer NHibernate-Sitzung an seinen Konstruktor) bedeutet, dass der Provider nicht auf seinen Datenspeicher zugreifen kann. Wie kann ich meine Objektabhängigkeit auflösen?
Es ist wahrscheinlich erwähnenswert, dass dies eine vorhandene Anwendung ist, die mit Ninject nachgerüstet wurde. Zuvor verwendete ich parameterlose Konstruktoren, die in der Lage waren, ihre erforderlichen Abhängigkeiten in Verbindung mit den parametrisierten Konstruktoren zu erstellen, um Unit-Tests zu unterstützen.
Irgendwelche Gedanken, oder habe ich mich hier in eine Ecke gebaut?
Ninject hat einen offiziellen CSL-Adapter Januar 2010. –
Es fehlt noch auf der CSL-Homepage (es ist stattdessen in der NInject-Version enthalten) – SztupY
"-Konstruktor, der die erforderlichen Repositorys mit Ninject initialisiert" - achten Sie darauf, ob Ihre Repositories (oder ihre Abhängigkeiten) im Anforderungs- oder Transientenbereich sind Wenn der Kontext der verfügbaren Daten in den Vordergrund rückt, werden Sie mit Ausnahme der ersten Anfrage auf einen Kontext für entsorgte Daten zugreifen (da Sie die Lebensdauer eines Anbieters nicht steuern und ASP.NET ihn über mehrere Anfragen hinweg wiederverwenden kann). Ich habe jedes Mal eine Repository-Instanz aus dem Locator bekommen, wenn ich sie aufrufen musste, als ich auf dieses Problem stieß. –