Вам не нужно разрешать компонент во время процесса сборки. Autofac способен решать зависимость графа объекта. В вашем случае CacheHelper
зависит от ICacheRepository
, так что вы просто должны зарегистрировать CacheHelper
и ICacheRepository
var builder = new ContainerBuilder();
builder.RegisterType<CacheRepository>().As<ICacheRepository>();
builder.RegisterType<CacheHelper>().As<CacheHelper>();
Когда Autofac рассосется CacheHelper
создаст граф зависимостей и создать экземпляр CacheHelper
с экземпляром ofsi ICacheRepository
. Если вам нужен Singleton, вы можете указать Autofac, чтобы создать только один экземпляр.
var builder = new ContainerBuilder();
builder.RegisterType<CacheRepository>().As<ICacheRepository>();
builder.RegisterType<CacheHelper>().As<CacheHelper>().SingleInstance();
Другим решением было бы зарегистрировать лямбда-выражения, эти регистрации называются, когда вам это нужно, так что вы можете решить вещи в процессе сборки:
var builder = new ContainerBuilder();
builder.RegisterType<CacheRepository>().As<ICacheRepository>();
builder.Register(c => new CacheHelper(c.Resolve<ICacheRepository>()))
.As<CacheHelper>()
.SingleInstance(); // It will result of having one CacheHelper whereas
// ICacheRepository is declared as .InstancePerDependency
Будьте осторожны с этим решением, потому что ICacheRepository
является объявленный без рамки, по умолчанию будет использоваться область InstancePerDependency
. Поскольку CacheHelper
- SingleInstance
, будет использоваться только один экземпляр ICacheRepository
, который может привести к ошибкам. См. Captive Dependency для получения дополнительной информации.
В вашем случае, похоже, вам не нужна такая регистрация.
Ваша цель сделать 'cacheHelper' синглом? Это может быть достигнуто по-другому. –