1

在带有 MVC3 Ninject Extension 的 MVC4 应用程序中使用 Ninject,当绑定到存储库(DbContext)时,我想InRequestScope用于控制器,当在自定义MembershipProvider.

我想做这个:

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

这样,对控制器的每个 Web 请求都会获得一个新的 repo 实例,而 MembershipProvider 会保持与 repo 的可重用连接。

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

4

1 回答 1

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

于 2012-10-02T05:25:48.270 回答