そのため、今日 (Unity を使用して) Dependency Injection を使用しているときに、マイナーな難問に遭遇しました。リポジトリと、そのリポジトリに基づくキャッシュの両方があります。
これは非常に基本的なデモンストレーションです。
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の何かがありますか?