将运行时参数从控制器传递到具体的域类,以便使用ninject执行存储过程

时间:2018-07-14 17:16:58

标签: c# asp.net-mvc-5 ninject-3

你好,我尝试使用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(); }
    }
}

0 个答案:

没有答案