我需要根据传入请求中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()));