gpt4 book ai didi

caSTLe-windsor - 在为下游依赖项提供值的同时解决依赖项

转载 作者:行者123 更新时间:2023-12-04 04:28:37 25 4
gpt4 key购买 nike

在尝试将 Windsor 与 Web API 结合使用并将 HttpRequestMessage 注入(inject) Controller 的下游 依赖项时,我遇到了无穷无尽的问题。由于我已经在 Stackoverflow 上尝试了所有匹配的答案,所以我想以不同的方式提出问题:

在 CaSTLe Windsor 中,如何在为下游 依赖项提供值的同时解析组件实例?也就是说,所提供的值是被解析的组件所需的组件所必需的。

对于上下文,我正在尝试注入(inject) HttpRequestMessage 以便我可以使用它来解析请求上下文(主要是解析绝对 URL)。

编辑 我还想指出,我目前不依赖于 Web Host/System.Web,我不想更改它。

最佳答案

正确的做法是

  1. 创建 IMyDesiredRouteParameterProvider
  2. 实现它。在里面获取当前请求,获取url
  3. 注册它并通过构造函数将它注入(inject)到所需的依赖类中。

我自己做了一个这样的实现,我可以说这样它工作得很好。您可以制作 Web.Infrastructure 程序集并将实现放在那里。或者,如果您要从另一个 Web 模块引用它,则将接口(interface)和实现都放在那里。

using System;
using System.Web;

namespace RouteParameterProvider
{
interface IMyRouteParameterProvider
{
string GetRouteParameter();
}

public class ControllerActionMethodRouteParameterProvider : IMyRouteParameterProvider
{
public string GetRouteParameter()
{
string Parameter = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"] as string;
if (string.IsNullOrEmpty(Parameter))
{
throw new InvalidOperationException();
}
return Parameter;
}
}
}

您可以从以下位置获取请求上下文包含的所有可能内容:

HttpContext.Current.Request.RequestContext

如果你重新考虑你的设计决定会更好:

I need HttpRequestMessage to be regstered prior to creating each instance of SomethingController so that it will be available down at the LinkGenerator layer.

容器要在运行时初始化,然后用于解析。

关于caSTLe-windsor - 在为下游依赖项提供值的同时解决依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com