2012-10-01 58 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