我收到以下错误:
Autofac.Core.DependencyResolutionException:在调用'AerospikeClient‘类型上的构造函数'Void .ctor(System.String,Int32)’时抛出一个异常。
以下是autofac的堆栈跟踪:
在Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate() 在Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext上下文中,IEnumerable
1 parameters) at Autofac.Core.Activators.Reflection.ReflectionActivator.<ConfigurePipeline>b__11_0(ResolveRequestContext ctxt, Action1 next)在Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext上下文中,Action1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt) at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action1 next在Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt)在Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext上下文中,( Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt) ( Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt) ( Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext上下文),Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt(Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt) )( Autofac.Core.Resolving.Middleware.ScopeSelectionMiddleware.Execute(ResolveRequestContext上下文),( Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.b__1(ResolveRequestContext ctxt) ( Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)在Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope ),ResolveRequest请求(应Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest请求)(应Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest请求)(应Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest请求))(在Autofac.ResolutionExtensions.TryResolveService(IComponentContext上下文、服务,( Autofac.ResolutionExtensions.ResolveOptional(IComponentContext上下文中的IEnumerable1 parameters, Object& instance) at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable1参数),Autofac.ResolutionExtensions.ResolveOptional(IComponentContext上下文中的serviceType类型,IEnumerable‘1参数(在Autofac.ResolutionExtensions.ResolveOptional(IComponentContext上下文中),Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetService(Type serviceType中的类型serviceType) ( Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetService(IServiceProvider sp ),类型类型,requiredBy类型,布尔isDefaultParameterRequired)
以下是我的登记:
builder.RegisterType<AerospikeClient>().As<IAerospikeClient>()
.WithParameter("hostname", _configuration["AerospikeHostName"])
.WithParameter("port", int.Parse(_configuration["AerospikePort"]))
.SingleInstance();_configuration正被传递给我的autofac模块,它是IConfigurationRoot类型的。我这样做是为了能够从外部传递值。
如本人将上述登记更改为:
builder.RegisterType<AerospikeClient>().As<IAerospikeClient>()
.WithParameter("hostname", "172.27.159.44")
.WithParameter("port", 3000)
.SingleInstance();然后就开始工作了。但是,我不想像这样硬编码我的值。然后我就失去了基于不同环境来重写它们的机会。
我在这里做错什么了?
发布于 2021-01-18 09:54:24
检查从_configuration["AerospikeHostName"]返回的实际类型。它实际上是string,还是碰巧可以分配到字符串?
同样,检查实际使用的值是有效的,因为Autofac应该可以期望字符串值。
另外,在将来,考虑使用内置的诊断学来更清楚地了解在解析操作期间抛出哪些异常。
https://stackoverflow.com/questions/65754952
复制相似问题