首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autofac DependencyResolutionException

Autofac DependencyResolutionException
EN

Stack Overflow用户
提问于 2021-01-16 21:32:23
回答 1查看 2.4K关注 0票数 2

我收到以下错误:

Autofac.Core.DependencyResolutionException:在调用'AerospikeClient‘类型上的构造函数'Void .ctor(System.String,Int32)’时抛出一个异常。

以下是autofac的堆栈跟踪:

在Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate() 在Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext上下文中,IEnumerable1 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)

以下是我的登记:

代码语言:javascript
复制
builder.RegisterType<AerospikeClient>().As<IAerospikeClient>()
                .WithParameter("hostname", _configuration["AerospikeHostName"])
                .WithParameter("port", int.Parse(_configuration["AerospikePort"]))
                .SingleInstance();

_configuration正被传递给我的autofac模块,它是IConfigurationRoot类型的。我这样做是为了能够从外部传递值。

如本人将上述登记更改为:

代码语言:javascript
复制
builder.RegisterType<AerospikeClient>().As<IAerospikeClient>()
                .WithParameter("hostname", "172.27.159.44")
                .WithParameter("port", 3000)
                .SingleInstance();

然后就开始工作了。但是,我不想像这样硬编码我的值。然后我就失去了基于不同环境来重写它们的机会。

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-18 09:54:24

检查从_configuration["AerospikeHostName"]返回的实际类型。它实际上是string,还是碰巧可以分配到字符串?

同样,检查实际使用的值是有效的,因为Autofac应该可以期望字符串值。

另外,在将来,考虑使用内置的诊断学来更清楚地了解在解析操作期间抛出哪些异常。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65754952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档