我有一个存储库接口和类。我还有服务接口和类,它们依赖于存储库接口。典型的 DI。我的目标是在服务和存储库之间添加缓存,而不是触及服务或存储库。这是代码:
public class CachedCustomerRepository : ICustomerRepository
{
private readonly ICustomerRepository _repository;
private readonly ConcurrentDictionary<int, Customer> _cache;
public CachedCustomerRepository(ICustomerRepository repository)
{
if (repository == null)
throw new ArgumentNullException("repository");
this._repository = repository;
this._cache = new ConcurrentDictionary<int, Customer>();
}
}
我在温莎城堡做到了这一点。我刚刚添加了课程,它立即生效,没有任何注册更改。这对我来说真是太棒了!:) 现在我尝试对 Autofac 做同样的事情,但失败了。它抱怨循环依赖,我不知道如何注册它。
编辑 - 这是注册:
builder.RegisterAssemblyTypes(typeof(ICustomerRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.SingleInstance();
编辑 - 这是现在的注册:
builder.RegisterAssemblyTypes(typeof(ICustomerRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository") && !t.Name.StartsWith("Cached"))
.AsImplementedInterfaces()
.SingleInstance();
在此之后将为每个缓存的存储库进行注册。