2

所以我今天在使用依赖注入(使用 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);

但我通常会尽量避免更新任何东西,而是更喜欢使用我的 DI 框架来进行构建和生命周期管理。

这是这样做的“公认”方式吗?Unity 中有什么东西可以做到这一点吗?

4

1 回答 1

1

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

于 2013-05-14T21:01:07.703 回答