2

所以我今天在使用依赖注入时遇到了一个小问题(使用Unity) - 我有一个存储库和一个由该存储库支持的缓存。DependencyInjection具有实现相同接口的缓存和存储库

这是一个非常基本的演示:然后

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); 

但我通常尽量避免新的-ING任何东西,更喜欢用我的DI框架做建筑和生命周期管理。

这是“接受”的方式吗? Unity中是否有一些适合做这件事的东西?

回答

1

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

+0

太棒了,谢谢 - 我会用它:) – csauve