У меня есть банк/коллекция, которая кэширует экземпляры объектов в памяти, поэтому каждому запросу не нужно возвращаться в хранилище данных. Я бы хотел, чтобы Autofac предоставил экземпляр этого банка, но затем истек его срок действия через x секунд, чтобы при следующем запросе был создан новый экземпляр. У меня возникли проблемы с настройкой LifetimeScope для достижения этой цели. Я прочитал это пару раз. Объект Bank на самом деле не зависит от единицы работы. В идеале он будет находиться «над» всеми единицами работы, кэшируя объекты внутри и между ними.
В настоящее время я использую описанный ниже подход, однако он не работает так, как я надеялся.
Может кто-нибудь указать мне в правильном направлении?
....
builder.Register(c =>
{
return new ORMapBank(c.Resolve<IORMapRoot>());
}).InstancePerMatchingLifetimeScope(ExpireTimeTag.Tag());
IContainer container = builder.Build();
var TimedCache= RootScope.BeginLifetimeScope(ExpireTimeTag.Tag());
DependencyResolver.SetResolver(new AutofacDependencyResolver(TimedCache));
....
public static class ExpireTimeTag
{
static DateTime d = DateTime.Now;
static Object tag = new Object();
public static object Tag()
{
if (d.AddSeconds(10) < DateTime.Now)
{
CreateTag();
return tag;
}
private static void CreateTag()
{
tag = new Object();
}
}
Большое спасибо заранее.