我正在使用带有统一IOC的web api。
web api客户端在请求标头中传递client-id,并根据此值解析依赖关系以创建外部dll的方法实例。
创建此实例大约需要6-7秒,这会在web api中产生性能问题。
我想要的是阻止在标题中使用相同客户端ID的呼叫创建实例。
这是我到目前为止实施的方式: -
//========================== ArchiveFactory ==========================
ArchiveFactory archiverFactory = (HttpRequest httpRequest) =>
{
container.RegisterType<IArchive, Archive>("Archive",
new HierarchicalLifetimeManager(),
new InjectionConstructor(
new ResolvedParameter<IStoreClient>(),
Helper.GetArchiveContext(httpRequest))
);
return container.Resolve<IArchive>("Archive");
};
container.RegisterInstance(archiverFactory);
具体到我的要求 - 我正在调用亚马逊服务来检索图像,并且有一个公司dll可以调用亚马逊。
答案 0 :(得分:0)
您可以在控制器/ API层使用缓存机制(例如Strathweb.CacheOutput.WebApi2),您可以在下面装饰控制器方法。它可以根据参数进行缓存,因此如果请求带有相同的参数,它将返回缓存中的结果。
[HttpGet]
[Route("")]
[CacheOutput(ServerTimeSpan = 60, ExcludeQueryStringFromCacheKey = true)]
public IHttpActionResult GetProducts(string clientId)
{
var product = new List<Product>();
return Ok(product);
}
此外,您可能希望检查要尝试实例化的类构造函数,以解决速度太慢的问题。如果适用,也可以考虑使用延迟加载。