2012-10-01 93 views
1

在MVC4應用程序和MVC3 Ninject擴展中使用Ninject時,綁定到存儲庫(DbContext)時,我希望對控制器使用InRequestScope,並且在自定義內使用同一個存儲庫時使用InSingletonScope MembershipProviderNinject有條件綁定更改範圍

我想這樣做:

kernel.Bind<IRepo>().To<Repo>().InRequestScope(); 
kernel.Bind<IRepo>().To<Repo>().WhenInjectedInto<MembershipHelper>() 
           .InSingletonScope(); 

讓每個Web請求到控制器得到回購的新實例,同時保持的MembershipProvider可重複使用的連接回購。

這似乎在開發環境中正常工作,但是如何知道正在使用哪個綁定?有沒有一種方法來測試示波器是否正常工作?

回答

2

是的,這很好。這裏是一個非常簡單的方法來測試它:

public interface IRepo { } 

public class Repo : IRepo { } 

public class MembershipHelper 
{ 
    private readonly IRepo _repo; 
    public MembershipHelper(IRepo repo) 
    { 
     _repo = repo; 
    } 

    public string GetId() 
    { 
     return _repo.GetHashCode().ToString(); 
    } 
} 

public class HomeController : Controller 
{ 
    private readonly IRepo _repo; 
    private readonly MembershipHelper _helper; 
    public HomeController(IRepo repo, MembershipHelper helper) 
    { 
     _repo = repo; 
     _helper = helper; 
    } 

    public ActionResult Index() 
    { 
     return Content(_repo.GetHashCode().ToString() + " " + _helper.GetId()); 
    } 
} 

現在導航到/home/index並觀察2個哈希碼。每個請求中的第一個更改,而第二個保持不變。

+0

完美,謝謝。 – BG100