autofac / Autofac

An addictive .NET IoC container
https://autofac.org
MIT License
4.44k stars 836 forks source link

Service is not register in Eureka because of Autofac #1394

Closed xXAvoraXx closed 9 months ago

xXAvoraXx commented 9 months ago

Describe the bug

I am trying to register my .net 7 web api application to eureka server, but I am getting the following error, why?

Code Explain

I use Autofac for service registrations, I make autofac configurations in a separate dotnet 7 library project. Even though I wrote the necessary configurations to connect to the Eureka service, I get an error.

Codes: CoreModule

    using Project.Services.Core.Extensions;
    using Project.Services.Core.Utilities.IoC;
    using Microsoft.Extensions.DependencyInjection;
    using StackExchange.Redis;
    using System.Diagnostics;
    using Serilog;
    using Microsoft.Extensions.Configuration;
    using Steeltoe.Discovery.Client;
    using Steeltoe.Discovery.Eureka;

    namespace Project.Services.Core.DependencyResolvers
    {
        public class CoreModule : ICoreModule
        {
            public void Load(IServiceCollection services, IConfiguration configuration)
            {
                services.AddServiceDiscovery(o => o.UseEureka());

                services.AddMemoryCache();
                services.AddSingleton<ICacheManager, MemoryCacheManager>();
                services.AddSingleton<IDistributedCacheManager, DistributedCacheManager>();
                services.AddHttpContextAccessor();
                services.AddSingleton<Stopwatch>();

            }
        }
    }

Program.cs

    builder.Services.AddDependencyResolvers(new ICoreModule[]
                {
                    new CoreModule()
                }, builder.Configuration);

appsettings.json config

      "Spring": {
        "Application": {
          "Name": "STOCK-SERVICE"
        }
      },
      "Eureka": {
        "Client": {
          "ServiceUrl": "http://localhost:867/eureka/",
          "ValidateCertificates": false,
          "ShouldRegisterWithEureka": true
        },

        // No docke instance added
        "Instance": {
          //"port": 5004,
          "NonSecurePort": 5004,
          "HostName": "localhost",
          "InstanceId": "Stock.API,Port:5004",
          "StatusPageUrlPath": "/swagger/index.html"
          //"HealthCheckUrlPath": "/api/values/healthcheck"
        }
      }

Error Details

    Autofac.Core.DependencyResolutionException
      HResult=0x80131500
      Message=An exception was thrown while activating λ:Microsoft.Extensions.Hosting.IHostedService[] -> Steeltoe.Discovery.Client.DiscoveryClientService -> λ:Steeltoe.Discovery.IDiscoveryClient -> λ:Steeltoe.Discovery.Eureka.EurekaDiscoveryClient -> Steeltoe.Discovery.Eureka.EurekaApplicationInfoManager.
      Source=Autofac
      StackTrace:
       at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
       at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
       at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
       at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
       at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
       at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
       at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
       at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
       at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
       at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
       at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
       at Autofac.Core.Resolving.ResolveOperation.InvokePipeline(ResolveRequest request, DefaultResolveRequestContext requestContext)
       at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
       at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
       at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
       at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
       at Autofac.Core.Container.ResolveComponent(ResolveRequest request)
       at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
       at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
       at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
       at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
       at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
       at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__12.MoveNext()
       at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
       at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
       at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
       at Program.<Main>$(String[] args) 

    inner 1
    DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Options.IOptionsMonitor`1[Steeltoe.Discovery.Eureka.EurekaInstanceOptions], Microsoft.Extensions.Logging.ILoggerFactory)' on type 'EurekaApplicationInfoManager'.

inner 2
    NullReferenceException: Object reference not set to an instance of an object.

Steps to reproduce

Steps to reproduce the behavior: https://github.com/xXAvoraXx/SteeltoeProject

Environment (please complete the following information):

Screenshots

If applicable, add screenshots to help explain your problem.

Additional context or links

Add any other context about the problem here.

xXAvoraXx commented 9 months ago

It gives an error when run with docker-compose, but no error occurs when run with IIS.

tillig commented 9 months ago

This is going to be an error with your app code, not a bug with Autofac. You already asked this on Stack Overflow so hopefully someone in the community can answer.

You'll notice I asked you for the inner exception over on Stack Overflow. Not just the message, the whole stack trace. That stack trace is good to tell you what code you should be looking at, as explained in our troubleshooting docs. From the message here, seems like you have a null reference. That's the error.

I wish we had the bandwidth to give away free consulting hours and debug everyone's app code but we don't, so Stack Overflow is your best avenue. Hopefully someone in the community has that kind of time to allocate.

xXAvoraXx commented 9 months ago

This is going to be an error with your app code, not a bug with Autofac. You already asked this on Stack Overflow so hopefully someone in the community can answer.

You'll notice I asked you for the inner exception over on Stack Overflow. Not just the message, the whole stack trace. That stack trace is good to tell you what code you should be looking at, as explained in our troubleshooting docs. From the message here, seems like you have a null reference. That's the error.

I wish we had the bandwidth to give away free consulting hours and debug everyone's app code but we don't, so Stack Overflow is your best avenue. Hopefully someone in the community has that kind of time to allocate.

InnerException

{Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Options.IOptionsMonitor`1[Steeltoe.Discovery.Eureka.EurekaInstanceOptions], Microsoft.Extensions.Logging.ILoggerFactory)' on type 'EurekaApplicationInfoManager'.
 ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Steeltoe.Discovery.Eureka.EurekaInstanceOptions.ApplyConfigUrls(List`1 addresses, String wildcard_hostname)
   at Steeltoe.Discovery.Eureka.EurekaPostConfigurer.UpdateConfiguration(IConfiguration config, EurekaInstanceOptions options, IApplicationInstanceInfo instanceInfo)
   at Steeltoe.Discovery.Eureka.EurekaPostConfigurer.UpdateConfiguration(IConfiguration config, EurekaServiceInfo si, EurekaInstanceOptions instOptions, IApplicationInstanceInfo appInfo)
   at Steeltoe.Discovery.Eureka.EurekaDiscoveryClientExtension.<ConfigureEurekaServices>b__10_3(EurekaInstanceOptions options, IServiceProvider serviceProvider)
   at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
   at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
   at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
   at System.Lazy`1.CreateValue()
   at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd[TArg](String name, Func`3 createOptions, TArg factoryArgument)
   at lambda_method185(Closure, Object[])
   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   --- End of inner exception stack trace ---
   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass12_0.<UseSingleConstructorActivation>b__0(ResolveRequestContext ctxt, Action`1 next)
   at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)}

InnerException StackTrace

   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass12_0.<UseSingleConstructorActivation>b__0(ResolveRequestContext ctxt, Action`1 next)
   at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)

StackTrace

at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
   at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
   at Autofac.Core.Resolving.ResolveOperation.InvokePipeline(ResolveRequest request, DefaultResolveRequestContext requestContext)
   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
   at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
   at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
   at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
   at Autofac.Core.Container.ResolveComponent(ResolveRequest request)
   at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
   at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
   at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
   at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
   at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>d__12.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.<RunAsync>d__4.MoveNext()
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at Program.<Main>$(String[] args) in C:\\Projects\\Yeditepe\\src\\Services\\EAS\\Project.Services.APP.WebAPI\\Program.cs:line 169
xXAvoraXx commented 9 months ago

Solution -> https://github.com/SteeltoeOSS/Steeltoe/issues/1186#issuecomment-1739365575