在我的 Autofac 注册中,我有这些注册:
builder.RegisterType<MemcachedClient>()
.As<IMemcachedClient>().SingleInstance();
builder.RegisterType<RequestCacheManager>()
.As<ICacheManager>()
.Named<ICacheManager>("cache_per_request").InstancePerHttpRequest();
builder.RegisterType<MemcachedManager>()
.As<ICacheManager>()
.Named<ICacheManager>("cache_static_mem").InstancePerHttpRequest();
builder.RegisterType<MemoryCacheManager>()
.As<ICacheManager>()
.Named<ICacheManager>("cache_static").SingleInstance();
builder.RegisterType<StoreOrderService>().As<IStoreOrderService>()
.WithParameter(ResolvedParameter.ForNamed<ICacheManager>("cache_per_request"))
.InstancePerHttpRequest();
如您所见,我正在注册 3 个不同的 CacheManager,但对于 StoreOrderService,我强制该实现基于“请求”,即每个请求的缓存。
现在我也有这个注册:
builder.RegisterType<CustomerHelper>().As<ICustomerHelper>().InstancePerHttpRequest();
CustomerHelper 在其构造函数中包含一个 CacheManager。我希望 CustomerHelper 使用MemoryCacheManager
OR the,MemcachedManager
但我不希望它使用每个请求策略的缓存。
但是,因为StoreOrderService
首先调用了,然后调用了 my CustomerHelper
,所以 myCustomerHelper
最终得到了 "Cache per request" ICacheManager
。如何强制CustomerHelper
不使用此“每个请求的缓存” ICacheManager
?