如何在控制器依赖注入中使用路由值?

时间:2016-12-15 18:23:27

标签: asp.net-mvc asp.net-web-api dependency-injection

我们公司有三个主要计划,我们的大多数申请都是多租户,数据按计划分开。我们的Web应用程序使用第一个路径段来指示程序,因此我们的默认MVC路径是

{program}/{controller}/{action}/{id}

我有一条规则,任何依赖于程序的类只接受其构造函数中的程序信息。在MVC或Web API控制器中,我想在它们的构造函数中创建任何依赖项(手动或使用DI框架),这意味着我需要访问控制器构造函数中的路由值。

最初这很简单,因为我可以使用静态属性

访问路径数据
System.Web.HttpContext.Current.Request.RequestContext.RouteData

现在它更复杂,因为我支持MVC和Web API,有时在同一个项目中,都有定义和属性路由的混合。我也开始使用OWIN查看引导Web API,在这种情况下我还没有发现一种在控制器构造函数中访问路由数据的方法。

所有这些让我相信我做错了。当依赖项需要请求路由中的值时,执行构造函数依赖项注入的最佳方法是什么?

澄清:我的应用程序由MVC和API控制器组成。我有需要路由值的依赖项。覆盖Initialize方法是在控制器生命周期的早期访问路由数据的“正确”方法,它允许我手动创建我的依赖项。

我现在想使用Ninject或其他DI框架使用构造函数DI,但我不确定如何在构造函数中访问路径数据。 System.Web.HttpContext.Current.Request.RequestContext.RouteData在3个用例中的2个(标准MVC和API)中工作,但感觉不对。它在使用OWIN启动的Web API的第三个用例中不起作用。

当依赖关系需要路由值时,构造函数DI的最佳方法是什么?

0 个答案:

没有答案