C# DependencyInjection,具有实现相同接口的缓存和存储库

C# DependencyInjection,具有实现相同接口的缓存和存储库,c#,.net,dependency-injection,unity-container,repository-pattern,C#,.net,Dependency Injection,Unity Container,Repository Pattern,因此,我在今天使用依赖项注入(使用Unity)时遇到了一个小难题—我有一个存储库和一个由该存储库支持的缓存 下面是一个非常基本的演示: public interface IStuffRepo { Stuff GetStuff(); } public class Repo : IStuffRepo { public Stuff GetStuff() { return get_stuff_from_the_database(); // or something } } pu

因此,我在今天使用依赖项注入(使用Unity)时遇到了一个小难题—我有一个存储库和一个由该存储库支持的缓存

下面是一个非常基本的演示:

public interface IStuffRepo {
  Stuff GetStuff();
}

public class Repo : IStuffRepo {
  public Stuff GetStuff() {
    return get_stuff_from_the_database();  // or something
  }
}

public class StuffCache : IStuffRepo {
  private Stuff _cached;      
  private IStuffRepo _actualRepo;     
  public StuffCache([Dependency] IStuffRepo actualRepo) { _actualRepo = actualRepo; }
  public Stuff GetStuff() {
    if (_cached != null) return cached_stuff;
    _cached = _actualRepo.GetStuff(); return _cached;
  }
}
我希望我的消费者可以注入IStuffRepo,让我的DI框架和组合根处理构建它。我选择了这种模式,这样对消费者来说,缓存和回购是相同的

我现在正试图找出如何设置合成根来构建这一切。我能想到的唯一方法是:

var cache = new StuffCache(container.Resolve<StuffRepository>());
container.RegisterInstance<IStuffRepository>(cache);
var cache=new-StuffCache(container.Resolve());
容器注册状态(缓存);
但我通常尽量避免使用新的工具,而更喜欢使用我的DI框架来进行构建和生命周期管理

这是“公认”的做法吗?Unity中是否有什么东西适合这样做?

根据,如果您对该类型的特定实例有一个命名映射,[Dependency]注释可以使用一个参数来指定它将使用的特定映射