我有一个bank/collection,用于在内存中缓存对象的实例,这样每个请求都不需要返回数据存储区.我希望Autofac提供该银行的一个实例,但是在x秒后将其过期,以便在下一个请求中创建一个新实例.我无法设置LifetimeScope来实现这一目标.我已经通过阅读这几次.银行对象实际上不受工作单元的约束.理想情况下,它将位于所有工作单元"之上",在其内部和之间缓存对象.
我目前正在使用下面的方法,但它没有像我希望的那样工作.
有人可以指点我正确的方向吗?
....
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));
Run Code Online (Sandbox Code Playgroud)
....
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();
}
}
Run Code Online (Sandbox Code Playgroud)
首先十分感谢.
通常使用缓存装饰器来实现这种行为.假设您IORMapRoot有责任获取有问题的数据(但如果相同则可以使用ORMapBank),您可以执行以下操作:
CachingORMapRoot实现的新类型IORMapRootTimeSpan和原始IORMapRoot实现的实例.IORMapRoot这是实现此类缓存的一种非常简洁的方法.它还可以轻松地在缓存和非缓存实现之间切换.
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |