【问题标题】:How to inject different dependencies into WebApi Controller using StructureMap如何使用 StructureMap 将不同的依赖项注入 WebApi Controller
【发布时间】:2012-05-09 08:15:43
【问题描述】:
目前我有一个 MVC 应用程序,它也包含 WebApi 控制器。
我已设置 StructureMap 以使用默认约定进行初始化,该约定处理 MVC 和 WebApi 的服务依赖项。这一切都很完美。
但是,我有一个身份验证服务依赖项,应该为 WebApi 注入,并为 MVC 注入不同的实现。由于 StructureMap 有相同的初始化引导代码,如何根据传入的请求是 WebApi 端点还是 Mvc 控制器端点进行切换?
【问题讨论】:
标签:
c#
asp.net-mvc
dependency-injection
structuremap
asp.net-web-api
【解决方案1】:
不知道这是否是实现这一目标的最佳方式,但我使用 ObjectFactory.Configure 方法在启动时覆盖初始化注册表,但在 Mvc 的 DependencyResolver.SetResolver 和 WebApi 的 GlobalConfiguration.Configuration 上的每个 SetResolver 中执行此操作.ServiceResolver.SetResolver.
例如
ObjectFactory.Configure(x => x.For<IAuthenticationService>()
.Use(s => s.GetInstance<IMvcAuthenticationService>()));
和
ObjectFactory.Configure(x => x.For<IAuthenticationService>()
.Use(s => s.GetInstance<IWebApiAuthenticationService>()));