2012-04-14 2 views
13

Sto creando un'applicazione con un'interfaccia API Web ASP.NET che utilizza l'approccio Self Hosting. Voglio utilizzare un ambito simile a InRequestScope() fornito da MVC3. Quando eseguo l'hosting di un'applicazione API Web su IIS, questa sembra essere supportata da Ninject.Extension.WebAPI. Ma quando self hosting WebAPI ottengo una nuova istanza quando creo i binding InRequestScope(). Esiste un modo per utilizzare questo ambito quando eseguo autonomamente l'API Web?Utilizzo di Ninjects InRequestScope() durante l'API Web di selfhosting

risposta

11

È possibile utilizzare le estensioni NamedScope per definire che il controller definisce un ambito e utilizzare tale ambito per tutto ciò che è nell'ambito di una richiesta. Miglior si utilizza convenzioni per questa definizione:

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); 

vi consiglio di implementare INotifyWhenDisposed per i controllori in modo che gli oggetti in richiesta di applicazione vengono immediatamente rilasciati dopo la richiesta. Per esempio. derivando dalla seguente classe invece di 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; 
} 

provo a fornire un'estensione per WebAPI selfhosting somewhen nelle settimane comming.

EDIT:

Selfhosting supporto è ora fornita da Ninject.Web.WebApi.Selfhosting https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0

Esempio: https://github.com/ninject/Ninject.Web.WebApi/tree/master/src/Ninject.Web.WebApi.Selfhost

+0

Sembra che ora c'è un'estensione che Ninject.Web.WebAPI supporta questo, ma attualmente non è elencato su http://www.ninject.org/extensions.html? Quella pagina è obsoleta e dovrebbe reindirizzare altrove o deve essere semplicemente aggiornata? se quest'ultimo è la fonte di quella pagina su github e posso inviare una richiesta di pull per dare una mano? Grazie mille, Remo !! Tu e ninject rock :) –

+3

L'uso degli scope nominati in questo modo non supporta ActionFilters –