我需要让我的服务依赖的解析基于传入请求中的HTTP标头的值。
我已经尝试过注册这样的工厂方法:
container.Register(c => GetDependencyForRequest(c.Resolve<IHttpRequest>()));
我也尝试过:
container.Register(c => GetDependencyForRequest(c.Resolve<IRequestContext>()));
然而,两者都扔ResolutionException
。
我宁愿不必在决定使用哪种实现时使用我的服务。我只是希望他们在构造函数中有IDependency
并让容器解析它。
有没有办法做到这一点?或者还有另一种方法可以解决这个问题吗?
答案 0 :(得分:2)
我不确定是否有办法通过IoC容器来实现。一种可能的解决方案是创建自己的Service子类,它可以根据Http Header在其构造函数中“新建”您的IDependency。下面是一些psuedocode给你一个想法。希望这可以帮助。
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")]();
}
}
答案 1 :(得分:1)
答案比我想象的要简单得多:
container.Register(c => FindDependencyForRequest(HttpContext.Current.ToRequestContext()));