#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
тип?