我在unity IOC中使用web api。
web api客户端在请求标头中传递client-id,并根据该值解析依赖关系以创建外部dll的方法实例。
创建此实例大约需要6-7秒,这会在web api中产生性能问题。
我想要的是防止为header中具有相同client-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);在我的需求中具体地说-我正在调用amazon服务来检索图像,并且有一个公司dll来调用amazon。
发布于 2016-08-10 23:58:14
你可以在控制器/API层使用缓存机制(例如Strathweb.CacheOutput.WebApi2),你可以像下面这样修饰控制器方法。它可以基于参数进行缓存,因此如果请求带有相同的参数,它将从缓存中返回结果。
[HttpGet]
[Route("")]
[CacheOutput(ServerTimeSpan = 60, ExcludeQueryStringFromCacheKey = true)]
public IHttpActionResult GetProducts(string clientId)
{
var product = new List<Product>();
return Ok(product);
}此外,您可能希望检查正在尝试实例化的类构造函数是否存在速度过慢的问题。如果可以的话,你也可以考虑使用延迟加载。
https://stackoverflow.com/questions/27100433
复制相似问题