<分区>
我有一个项目,我想在其中对多个接口(interface)使用缓存。
最好的方法是什么?我有两个想法:
缓存类和非缓存类都将实现相同的接口(interface)
public interface IFoo { object Get(); } public class Foo : IFoo { public object Get() { // return something from datasource return null; } } public class FooCached : IFoo { private readonly IFoo fooService; public FooCached(IFoo fooService) { this.fooService = fooService; } public object Get() { // check cache and if empty load the value using fooService (Foo class) return this.fooService.Get(); } }
每个实现都有自己的接口(interface)(虽然在这种情况下它基本上是相同的,只是名称不同)
public interface IFoo { object Get(); } public interface IFooCached : IFoo { } public class Foo : IFoo { public object Get() { // return something from datasource return null; } } public class FooCached : IFooCached { private readonly IFoo fooService; public FooCached(IFoo fooService) { this.fooService = fooService; } public object Get() { // check cache and if empty load the value using fooService (Foo class) return this.fooService.Get(); } }
我个人更喜欢第一种方式。我不太喜欢这种情况下的接口(interface)继承,因为这两个类基本相同,只是实现略有不同,我觉得它们应该有相同的接口(interface)。
但是,由于我看不到使用 Unity 实现此目的的“简单”方法,我不确定这是否真的是最佳方法。 基本上我需要将 IFoo 解析为 FooCached,除了 FooCached 本身,我需要 Foo。 (我知道如何完成这项工作,例如使用命名注册并为 FooCached 指定 InjectionConstructor,但这可能超出了这个问题的范围)。 另一方面,第二个非常容易设置。