Зарегистрировать класс в конкретный экземпляр

#dependency-injection #inversion-of-control #autofac

#внедрение зависимости #инверсия управления #autofac

Вопрос:

Я пытаюсь зарегистрировать класс в конкретном экземпляре.

У меня есть следующий класс:

 public class Repository : IRepository
{
 public Repository(ICache cache, ILogger logger) 
 {
   _cache = cache;
   _logger = logger;
 }
}
  

Существует два экземпляра ICache: MemoryCache и DbCache . Я хочу, чтобы он всегда регистрировался DbCache в Repository .

Вот код, в котором я пытаюсь зарегистрировать экземпляр в классе.

 var builder - new ContainerBuilder();

builder.Register((c, p) => 
 new Repository(p.Named<ICache>("cache"), p.Named<ILogger>("logger")));

builder.RegisterAssemblyModulesInDirectoryOf(Assembly.GetExecutingAssembly())
 .WhereFileMatches("Something.*.dll");

var container = builder.Build();

container.Resolve<IRepository>(new NamedParameter("cache", new DBCache()),
                new NamedParameter("logger", new Logger()));
  

В настоящее время DbCache загружается только при создании первого экземпляра репозитория. Однако после этого новые экземпляры репозитория используют MemoryCache. Я хочу, чтобы при создании экземпляра репозитория использовался только DbCache.

Комментарии:

1. Это часто задаваемые вопросы в документации.

2. Я следовал варианту 2, но теперь он даже не загружает нужный мне экземпляр (DbCache). По какой-то причине по умолчанию всегда используется MemoryCache.

3. Не могли бы вы поделиться тем, как вы регистрируете свой ICache тип?