2012-04-14 20 views
13

Tôi đang tạo một ứng dụng có giao diện ASP.NET Web API sử dụng phương pháp Self Hosting. Tôi muốn sử dụng một phạm vi tương tự như InRequestScope() do MVC3 cung cấp. Khi tôi lưu trữ một ứng dụng Web API trên IIS, điều này dường như được hỗ trợ bởi Ninject.Extension.WebAPI. Nhưng khi tự lưu trữ WebAPI tôi nhận được một cá thể mới khi tôi tạo các ràng buộc InRequestScope(). Có cách nào tôi có thể sử dụng phạm vi này khi tôi tự lưu trữ API web không?Sử dụng Ninjects InRequestScope() khi tự lưu trữ API Web

Trả lời

11

Bạn có thể sử dụng phần mở rộng NamedScope để xác định rằng bộ điều khiển xác định phạm vi và sử dụng phạm vi đó cho mọi thứ nằm trong phạm vi yêu cầu. Tốt nhất bạn sử dụng công ước cho định nghĩa này:

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

Tôi khuyên bạn nên thực hiện INotifyWhenDisposed cho các bộ điều khiển sao cho các đối tượng trong phạm vi yêu cầu được giải phóng ngay sau khi được yêu cầu. Ví dụ. bằng cách bắt nguồn từ lớp sau thay vì 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; 
} 

tôi cố gắng cung cấp một phần mở rộng cho WebAPI selfhosting somewhen trong tuần đến.

EDIT:

Selfhosting hỗ trợ hiện nay được cung cấp bởi Ninject.Web.WebApi.Selfhosting https://nuget.org/packages/Ninject.Web.WebApi.Selfhost/3.0.2-unstable-0

Ví dụ: https://github.com/ninject/Ninject.Web.WebApi/tree/master/src/Ninject.Web.WebApi.Selfhost

+0

Dường như bây giờ có một phần mở rộng Ninject.Web.WebAPI rằng hỗ trợ điều này, nhưng hiện không được liệt kê tại http://www.ninject.org/extensions.html? Trang đó có lỗi thời và nên chuyển hướng đến nơi khác hay chỉ cần cập nhật? nếu sau này, đó là nguồn của trang trên github và tôi có thể gửi một yêu cầu kéo để giúp đỡ? Cảm ơn rất nhiều, Remo !! Bạn và đá ninject :) –

+3

Sử dụng phạm vi được đặt tên theo cách này không hỗ trợ ActionFilters –

Các vấn đề liên quan