Ich erstelle eine Anwendung mit einer ASP.NET-Web-API-Schnittstelle, die den Self-Hosting-Ansatz verwendet. Ich möchte einen ähnlichen Bereich wie InRequestScope()
von MVC3 verwenden. Wenn ich eine Web-API-Anwendung auf dem IIS hosten, scheint dies von Ninject.Extension.WebAPI unterstützt zu werden. Aber wenn ich die WebAPI selbst hosting, bekomme ich eine neue Instanz, wenn ich Bindings InRequestScope()
erstelle. Gibt es eine Möglichkeit, diesen Bereich zu verwenden, wenn ich die Web-API selbst hosten möchte?Verwenden von Ninjects InRequestScope() beim Selfhosting der Web-API
Antwort
Sie können die NamedScope-Erweiterungen verwenden, um zu definieren, dass der Controller einen Bereich definiert und diesen Bereich für alle Bereiche verwendet, die sich in einem Anforderungsbereich befinden. Best Sie verwenden Konventionen für diese Definition:
const string ControllerScope = "ControllerScope";
kernel.Bind(x => x.FromThisAssembly()
.SelectAllClasses().InheritedFrom<ApiController>()
.BindToSelf()
.Configure(b => b.DefinesNamedScope(ControllerScope)));
kernel.Bind<IMyComponent>().To<MyComponent>().InNamedScope(ControllerScope);
Ich empfehle INotifyWhenDisposed
für die Controller zu implementieren, so dass die Objekte in Anforderungs Umfang unmittelbar nach der Anforderung freigegeben. Z.B. von aus der folgenden Klasse abgeleitet statt ApiController
public abstract class NinjectApiController : ApiController, INotifyWhenDisposed
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
this.IsDisposed = true;
this.Disposed(this, EventArgs.Empty);
}
public bool IsDisposed
{
get;
private set;
}
public event EventHandler Disposed;
}
Ich versuche, eine Erweiterung für WebAPI bereitzustellen some in den comming Wochen selfhosting.
EDIT:
Selfhosting Unterstützung jetzt von Ninject.Web.WebApi.Selfhosting vorgesehen https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0
Beispiel: https://github.com/ninject/Ninject.Web.WebApi/tree/master/src/Ninject.Web.WebApi.Selfhost
- 1. Verwenden von Ninject mit Owin und InRequestScope
- 2. Ninject 3 - Überschreibt BeginBlock() InRequestScope in asp.net WebAPI?
- 3. Ninject + ASP.NET MVC + InRequestScope
- 4. Verwenden von HttpContext.Current in ASP.NET-WebAPI
- 5. Nancy Selfhosting-Fehler auf Ubuntu mit Mono
- 6. Suche nach einem Ninject-Bereich, der sich wie InRequestScope verhält
- 7. Ausführen von Consol-Anwendung im Debug-Modus mit WCF Selfhosting?
- 8. Ninject, Bind sollte .InRequestScope() ODER .InSingletonScope()
- 9. Verwenden von Ninject zum Binden von WebApi-Filterattributen
- 10. Ninject WebAPI Der Vorgang kann nicht abgeschlossen werden, da der DbContext entsorgt wurde
- 11. Warum kann ich mit Ninjects ConstructorArgument keinen Wert null injizieren?
- 12. ASP.NET WebApi Post-Methode - 404 Beim Übergeben von Parametern
- 13. AspNet WebApi POST-Parameter ist Null beim Senden von XML
- 14. 405 Fehler beim Aufruf von Webapi Get-Methode mit Ajax
- 15. Verwenden von Serializable-Attribut für Modell in WebAPI
- 16. Verwenden von Url.Link mit Attributrouting in Webapi 2
- 17. Verwenden von asp webapi zum Posten einer verschachtelten Ressource
- 18. WebAPI-Modellbindung von JSON
- 19. Serveraufrufbild von WebAPI
- 20. Verwenden Sie benutzerdefinierte Klasse anstelle von ApplicationUser in WebApi
- 21. WebAPI von MVC-Controller aufrufen und dasselbe httpclient verwenden
- 22. Fehler bei der WebApi-Serialisierung
- 23. Kann ich Autofac DI in einem WebAPI messageHandler verwenden?
- 24. DbContext Angeordnet nach dem ersten Anfrage bei der Verwendung von Ninject des InRequestScope()
- 25. WebApi + Einfacher Injektor + OWIN
- 26. Verwenden von Basisklassen beim Erben
- 27. WebApi Json.NET benutzerdefinierte Datumsverarbeitung
- 28. Zurückgeben von Bildern aus WebApi
- 29. Wie man WebApi in Asp.net MVC hinzufügt und dann die WebAPI in der gleichen Anwendung verbraucht
- 30. Entwickeln von WebAPI mit Mono
Es sieht aus wie es ist jetzt eine Erweiterung Ninject.Web.WebAPI, dass unterstützt dies, ist aber derzeit nicht unter http://www.ninject.org/extensions.html aufgeführt? Ist diese Seite veraltet und sollte an anderer Stelle weitergeleitet werden oder muss sie nur aktualisiert werden? Wenn letzteres, ist die Quelle dieser Seite auf GitHub und ich kann eine Pull-Anfrage einreichen, um zu helfen? Vielen Dank, Remo !! Du und ninject rock :) –
Die Verwendung von benannten Bereichen auf diese Weise unterstützt keine ActionFilter –