2012-04-14 10 views
13

selfhosting zaman. MVC3 tarafından sağlanan InRequestScope()'a benzer bir kapsam kullanmak istiyorum. IIS'de bir Web API uygulaması barındıran bu, Ninject.Extension.WebAPI tarafından destekleniyor gibi görünüyor. Ancak, kendiliğinden WebAPI'yı barındıran ben InRequestScope() bağlamalarını oluşturduğumda yeni bir örnek alıyorum. Web API'sini kendim barındırdığımda bu alanı kullanabileceğim bir yol var mı?kullanma Ninjects InRequestScope() Ben Öz Barındırma yaklaşım kullanarak bir ASP.NET Web API arayüze sahip bir uygulama oluşturma Web API

cevap

11

Sen denetleyici bir kapsam tanımlar tanımlamak ve bir istek kapsamı içindedir her şey için o kapsamını kullanmak NamedScope uzantılarını kullanabilirsiniz. En Eğer bu tanım için kuralları kullanı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); 

ben istek kapsamında nesneler hemen isteğinden sonra serbest bırakılır böylece denetleyicileri için INotifyWhenDisposed uygulamak önerilir. Örneğin.

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

aşağıdaki sınıf türeyen yerine ApiController I geliyor haftalarda somewhen selfhosting WebAPI için bir uzantı sağlamaya çalışıyoruz.

DÜZENLEME:

destek şimdi Ninject.Web.WebApi.Selfhosting tarafından sağlanmaktadır Selfhosting https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0

Örnek: Şimdi bir uzantısı Ninject.Web.WebAPI varmış gibi https://github.com/ninject/Ninject.Web.WebApi/tree/master/src/Ninject.Web.WebApi.Selfhost

+0

görünüyor o bunu destekler, ancak şu anda http://www.ninject.org/extensions.html adresinde listelenmiyor mu? o sayfa modası geçmiş ve başka yerlerde yönlendirmesi gerektiğini de yoksa sadece güncellenmesi gerekir? Eğer ikincisi, sayfanın github'daki kaynağıysa ve yardım için bir çekme talebi gönderebilir miyim? Çok teşekkürler, Remo! Sen ve Ninject kaya :) –

+3

ActionFilters desteklemeyen bu şekilde adlandırılmış kapsamları kullanma –