你好,我尝试使用ninject 3将运行时参数从控制器传递到具体的类中
从具体类调用的数据库上下文类中的存储过程需要一个参数ProductGroupId。
public class ProductDetailController : Controller
{
private IProductDetailRepository productDetailRepository;
public static Guid _ProductGroupId
{
get; set;
}
public ProductDetailController(IProductDetailRepository productDetailRepository)
{
this.productDetailRepository = productDetailRepository;
}
public RedirectToRouteResult ProceedToProductDetailView(Guid ProductGroupId, string returnUrl)
{
_ProductGroupId = ProductGroupId;
return RedirectToAction("Index", new { returnUrl });
}
}
您可以看到ProductGroupId传递给了控制器,然后在属性中对其进行了设置。
接下来,NinjectDependancyResolver.cs类获取具体类所需的参数
private void AddBindings()
{
kernel.Bind<IProductRepository>().To<EFProductRepository>();
kernel.Bind<IProductDetailRepository>().To<EFProductDetailRepository>()
.WhenInjectedInto<ProductDetailController>()
.WithConstructorArgument("ProductGroupId", ProductDetailController._ProductGroupId);
}
具体类EFProductDetailRepository.cs已准备好调用数据库上下文类,以运行存储过程,但是在调用上下文时,它需要控制器的ProductGroupId。我已经将此值添加到ninject绑定中,如何访问它,以便可以将其从具体类传递给上下文类?
public class EFProductDetailRepository : IProductDetailRepository
{
EFDbContext context = new EFDbContext();
public IEnumerable<ProductDetail> ProductDetail
{
// context.getProductDetailsFromSP() needs ProductGroupId from the controller/ninject binding!
get { return context.getProductDetailsFromSP(); }
}
}