2012-04-14 3 views
13

자체 호스팅 접근 방식을 사용하여 ASP.NET 웹 API 인터페이스가있는 응용 프로그램을 만들고 있습니다. MVC3에서 제공하는 InRequestScope()과 비슷한 범위를 사용하고 싶습니다. IIS에서 웹 API 응용 프로그램을 호스트하면 Ninject.Extension.WebAPI가 지원하는 것 같습니다. 하지만 WebAPI를 자체 호스팅 할 때 바인딩을 만들면 새로운 인스턴스가 생깁니다 InRequestScope(). 웹 API를 자체 호스팅 할 때이 범위를 사용할 수있는 방법이 있습니까?Ninjects InRequestScope() 자체 웹 호스팅 API 사용

답변

11

NamedScope 확장을 사용하여 컨트롤러가 범위를 정의하고 요청 범위에있는 모든 항목에 대해 해당 범위를 사용하도록 정의 할 수 있습니다. 베스트 당신은이 정의에 대한 규칙을 사용

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

내가 요청 범위의 개체가 즉시 요청 이후에 출시되도록 컨트롤러 INotifyWhenDisposed을 구현하는 것이 좋습니다. 예 :

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

를 다음 클래스에서 파생 대신 ApiController에 의해 나는오고 주 somewhen selfhosting WebAPI에 대한 확장을 제공하려고합니다.

편집 :

가 지원이 지금 Ninject.Web.WebApi.Selfhosting에 의해 제공됩니다 Selfhosting https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0

예 : 지금 확장 Ninject.Web.WebAPI이처럼 https://github.com/ninject/Ninject.Web.WebApi/tree/master/src/Ninject.Web.WebApi.Selfhost

+0

이 보이는 이 기능을 지원하지만 현재 http://www.ninject.org/extensions.html에 나와 있지 않습니까? 해당 페이지가 구식이며 다른 곳으로 리디렉션해야합니까, 아니면 업데이트 만하면됩니까? 후자의 경우 github에서 해당 페이지의 출처이며 도움 요청을 제출할 수 있습니까? 너무 고마워, 레모 !! 너와 ninject rock :) –

+3

이런 식으로 명명 된 범위를 사용하는 것은 ActionFilters를 지원하지 않는다. –

관련 문제