http头-从容器访问IHttpRequest或IRequestContext



我需要根据传入请求中HTTP标头的值来解析服务的依赖项。

我试过注册一种工厂方法,比如:

container.Register(c => GetDependencyForRequest(c.Resolve<IHttpRequest>()));

我也试过:

container.Register(c => GetDependencyForRequest(c.Resolve<IRequestContext>()));

然而,两者都抛出ResolutionException s。

我不想让我的服务来决定使用哪种实现。我只是希望他们在构造函数中有一个IDependency,并让容器解析它

有办法做到这一点吗?或者还有别的办法吗?

我不确定是否有办法通过IoC容器来实现。一个可能的解决方案是创建您自己的服务子类,该子类可以在基于HttpHeader的构造函数中"新建"您的IDdependency。下面是一些伪代码,给你一个想法。希望这能有所帮助。

public abstract class MyServiceBase : Service
{
    private Dictionary<string, Func<IDependency>> Dependencies = new Dictionary<string, Func<Dependency>>()
                                                                    {
                                                                        {"header1", () => new Dependency()},
                                                                        {"header2", () => new Dependency()}
                                                                    };
    public IDependency Dependency { get; set; }
    protected MyServiceBase()
    {
        this.Dependency = this.Dependencies[this.RequestContext.GetHeader("headerName")]();
    }
}

答案比我想象的要简单得多:

container.Register(c => FindDependencyForRequest(HttpContext.Current.ToRequestContext()));

相关内容

  • 没有找到相关文章

最新更新