2012-04-14 11 views
13

Estoy creando una aplicación que tiene una interfaz API web ASP.NET utilizando el enfoque de autohosting. Quiero usar un alcance similar a InRequestScope() proporcionado por MVC3. Cuando albergo una aplicación de API web en el IIS, esto parece ser compatible con Ninject.Extension.WebAPI. Pero cuando autoalobo el WebAPI obtengo una nueva instancia cuando creo enlaces InRequestScope(). ¿Hay alguna forma de que pueda usar este alcance cuando autoaloco la API web?Uso de Ninjects InRequestScope() cuando autohosting Web API

Respuesta

11

Puede usar las extensiones de NamedScope para definir que el controlador define un alcance y usar ese alcance para todo lo que está en un ámbito de solicitud. Lo mejor que se utilizan las convenciones de esta definición:

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

me recomiendan para implementar INotifyWhenDisposed para los controladores de manera que los objetos en la solicitud de alcance se liberan inmediatamente después de la solicitud. P.ej. derivando a partir de la siguiente clase en lugar de 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; 
} 

Trato de ofrecer una extensión para WebAPI selfhosting en algún tiempo en las semanas comming.

EDIT:

Selfhosting apoyo se proporciona ahora por Ninject.Web.WebApi.Selfhosting https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0

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

+0

Parece que ahora hay una extensión que Ninject.Web.WebAPI lo admite, pero actualmente no figura en http://www.ninject.org/extensions.html? ¿Está esa página desactualizada y debería redirigirse a otra parte, o solo necesita actualizarse? si este último es el origen de esa página en github, ¿puedo enviar una solicitud de extracción para ayudarme? Muchas gracias, Remo !! You and ninject rock :) –

+3

Usar ámbitos con nombre de esta manera no es compatible con ActionFilters –