[英]Constructor dependency injection is initializing service
我正在使用Autofac 。
builder.RegisterType<LogHelper>().As<ILogger>().InstancePerLifetimeScope();
我正在将服务注册为InstancePerLifetimeScope
。 因此,在一个生存期范围内只能创建一个实例。
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
。
我想念什么吗?
这意味着在代码中的某个地方正在创建新的作用域。
如果唯一的问题与仅具有ILogger
接口的单个实例有关,则可以使用SingleInstance()
而不是InstancePerLifetimeScope()
。
InstancePerLifetimeScope()为每个嵌套的生存期范围创建实例。 因此,每次构造函数创建不同的实例时都调用它。 原因是,每个调用的范围也不同。
您应该使用单个实例来满足您的需求。 因为它从根目录和所有嵌套作用域的所有请求中返回一个实例。
builder.RegisterType<LogHelper>().As<ILogger>().SingleInstance();
检查此链接以获取更多信息:
https://autofaccn.readthedocs.io/en/latest/lifetime/instance-scope.html#instance-per-lifetime-scope
谢谢。
事实证明,设置为SingleInstance()的服务也使用LogHelper服务。 为此,将为SingleInstance()创建一个新实例。 我将SingleInstance更改为InstancePerLifetimeScope,现在工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.