В настоящее время я использую WithMetaData для подключения режима кэширования к привязке к репозиторию, например так:
Bind<IRepo>().To<CachedRepo>().WithMetaData(MetadataKeys.RepoKey, CacheMode.Cached);
Bind<IRepo>().To<Repo>().WithMetaData(MetadataKeys.RepoKey, CacheMode.NotCached);
static CacheMode GetTheCurrentCacheMode()
{
//returns a CacheMode based on some environmental settings
}
statuc Func<IBindingMetadata, bool> BasedOnTheCurrentCachingModeforTheRequest()
{
return meta => meta.Has(MetadataKeys.RepoKey)
meta.Get<CacheMode>(MetadataKeys.RepoKey) == GetTheCurrentCacheMode();
}
Есть ли лучший способ сделать это?В настоящее время мне нужно привязать тип вызова к методу, чтобы я мог получить конкретное значение IRepo в лямбда ToMethod:
Bind<TypeThatUsesTheIRepo>.ToMethod(context => context.Kernel.Get<IRepo>(BasedOnTheCurrentCachingModeforTheRequest));
Я лично не против решения, но я не совсем уверенлучший вариант, учитывая то, что я пытаюсь достичь (другая реализация IRepo будет выбрана во время выполнения в зависимости от среды).