Я использую Autofac .
builder.RegisterType<LogHelper>().As<ILogger>().InstancePerLifetimeScope();
Я регистрирую услугу как InstancePerLifetimeScope
.Таким образом, только один экземпляр создается в одной области действия Lifetime.
using (var container = Container.BeginLifetimeScope())
{
var logger = container.Resolve<ILogger>();
var logge1r = container.Resolve<ILogger>();
var logger1 = container.Resolve<ILogger>();
var repobackup = container.Resolve<IRepoBackup>();
repobackup.StartProcess();
}
Эти два разрешения дают мне один и тот же экземпляр.
var logger1 = container.Resolve<ILogger>();
var logger2 = container.Resolve<ILogger>();
Некоторым службам этот сервис требовался путем внедрения зависимостей.
var repobackup = container.Resolve<IRepoBackup>();
эта строка выше инициализирует класс RepoBackupImplemetaion
, для которого требуется экземпляр ILogger
, но, поскольку это разрешение находится в том же LifeTimeScope, необходимо передавать тот же экземпляр, но новый экземпляр создается каждый раз, когда вызывается конструктор с этой зависимостью.
internal class RepoBackupImplemetaion : IRepoBackup
{
public RepoBackupImplemetaion(ILogger logger)
{
LogHelper = logger;
}
}
Я зарегистрировал эту услугу как InstancePerLifetimeScope
.
Я что-то упустил?