Ninject条件绑定到更改范围

时间:2012-10-01 23:35:48

标签: asp.net-mvc binding scope ninject

在带有MVC3 Ninject扩展的MVC4应用程序中使用Ninject,当绑定到存储库(DbContext)时,我想在控制器中使用InRequestScope,而在自定义{{}中使用相同的存储库时使用InSingletonScope 1}}。

我想这样做:

MembershipProvider

因此,每个对控制器的Web请求都会获得一个新的repo实例,而MembershipProvider则维护一个可重用的连接到repo。

这似乎在开发环境中正常工作,但我怎么知道正在使用哪个绑定?有没有办法测试范围是否正常工作?

1 个答案:

答案 0 :(得分: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个哈希码。每个请求的第一个更改,而第二个保持不变。