Asp.net mvc 要更改范围的Ninject条件绑定
在具有MVC3 Ninject扩展的MVC4应用程序中使用Ninject时,当绑定到存储库(DbContext)时,我想对控制器使用Asp.net mvc 要更改范围的Ninject条件绑定,asp.net-mvc,binding,scope,ninject,Asp.net Mvc,Binding,Scope,Ninject,在具有MVC3 Ninject扩展的MVC4应用程序中使用Ninject时,当绑定到存储库(DbContext)时,我想对控制器使用InRequestScope,而在自定义成员身份提供程序中使用相同的存储库时,我想对InSingletonScope 我想这样做: kernel.Bind<IRepo>().To<Repo>().InRequestScope(); kernel.Bind<IRepo>().To<Repo>().WhenInjected
InRequestScope
,而在自定义成员身份提供程序中使用相同的存储库时,我想对InSingletonScope
我想这样做:
kernel.Bind<IRepo>().To<Repo>().InRequestScope();
kernel.Bind<IRepo>().To<Repo>().WhenInjectedInto<MembershipHelper>()
.InSingletonScope();
kernel.Bind().To().InRequestScope();
kernel.Bind().To().WhenInjectedInto()时
.InSingletonScope();
这样,对控制器的每个web请求都会获得一个新的repo实例,而MembershipProvider会维护到repo的可重用连接
这在开发环境中似乎可以正常工作,但我如何知道正在使用哪个绑定呢?有没有办法测试作用域是否正常工作?有,没问题。下面是一个非常简单的测试方法:
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个哈希代码。第一个请求在每次请求时都会更改,而第二个请求保持不变