2012-04-14 6 views
13

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

11

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

+0

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 :) –

+3

Die Verwendung von benannten Bereichen auf diese Weise unterstützt keine ActionFilter –

Verwandte Themen