【问题标题】:Using Structuremap how do i inject a property of an MVC Controller into the Constructor of a Service the Controller uses使用 Structuremap 我如何将 MVC 控制器的属性注入到控制器使用的服务的构造函数中
【发布时间】:2011-02-24 01:11:39
【问题描述】:

我刚开始使用 StructureMap 作为 asp.MVC 的 IOC 容器。我的一个控制器在构造函数中采用 IStreamService 接口。

这很容易像这样链接到 StreamService 的具体类实现

For<IStreamService>().HttpContextScoped().Use<StreamService>();

我面临的问题是具体的类构造函数需要一个 IPrincipal 参数,该参数需要注入。我想将实例化控制器的用户属性传递给具体服务。有人可以指出我正确的方向吗?

【问题讨论】:

  • 你真的需要从控制器中拉出 IPrincipal 吗?正如 Robin 所建议的,如果你只是将它从 HttpContext 中拉出来,那就容易多了。
  • 感谢 cmets。忘记 IPrincipal 恰好是可从 HttpContect 访问的属性这一事实。如果它是控制器需要的另一个属性,我该怎么做。即不能从 HttpContext 访问。有没有办法做到这一点?
  • 这怎么可能?是说 MyController 依赖于 StreamService,而 StreamService 又依赖于 MyController?

标签: asp.net structuremap


【解决方案1】:

没问题,只需将此行添加到您的配置中:

For<IPrincipal>().Use(() => HttpContext.Current.User);

使用 lambda 会导致在每次请求依赖项时对其进行评估(而不是在配置时作为单个实例。

【讨论】:

  • 嗨罗宾。感谢您的建议,这似乎是从 HTTPContext 访问的属性或可从单例等访问的其他属性的方法,但说该属性只能从控制器的实例访问。即说它是我创建的一个属性,它需要在实例化服务类时传入该属性,这可能吗?
  • 这听起来像是一个循环引用,如果你需要服务来实例化控制器并且你需要控制器来实例化服务......
  • 我唯一能想到的(除了改变你的设计,最好的)是在它们都被创建之后使用属性注入将控制器属性注入到服务中。请参阅文档:structuremap.net/structuremap/…
猜你喜欢
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2010-12-21
  • 2014-09-29
  • 1970-01-01
相关资源
最近更新 更多