【发布时间】:2014-11-24 08:16:04
【问题描述】:
我正在使用带有统一 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。
【问题讨论】:
-
只是为了添加更多 - 我想拥有一个静态的实例集合。稍后我可以检查实例是否可用于特定请求,然后才创建新实例。
-
嗨 container.Resolve
需要 6-7 秒?创建实例花费最多的时间在哪里? -
T 的构造函数必须与其他服务建立会话。这就是为什么我想只构建一次 T 并将其用于任何进一步的相同请求。
标签: asp.net-web-api dependency-injection inversion-of-control unity-container asp.net-web-api2