我有一个IRepository接口,包含许多T和几个实现(按需数据库,Web服务等)。我使用AutoFac来为许多T注册IRepository,具体取决于每个T需要的存储库种类。用一个标记替换存储库
我也有一个基于.NET缓存的实现,它在缓存中查找T,然后调用一个'真正的'IRepository寻找解决缓存遗漏的方法。它的构造是这样的:“真正的东西”
new CachingRepository(realRepository, cacheImplementation);
我想用一个配置标志,以决定是否AutoFac提供了缓存,基于IRepository的或看起来像'realRepository'来自AutoFac来解决IRepository < T>,但是当客户要求解析相同的接口时,客户会得到什么?如果标志被设置,我希望他们获得CachingRepository。
我无法理解如何实现这种基于标志的解决方案。有任何想法吗?
您也可以考虑将缓存作为一个方面来实现,只有启用了缓存后,才能通过AutoFac将其附加到“realRepository”。可能会减少您必须维护的与缓存相关的代码量。 – Brook 2011-06-03 15:33:11
与此类似,Autofac还支持通过DynamicProxy2拦截方法http://code.google.com/p/autofac/wiki/DynamicProxy2 – bentayloruk 2011-06-03 15:48:46
相关:http://stackoverflow.com/questions/2028747/caching-code-location在一个领域驱动设计 – 2011-06-03 16:17:04