简体   繁体   English

如何使用面向 .net 框架的结构图在 asp.net core 中配置 hangfire 并解决双向依赖

[英]How to configure hangfire in asp.net core using structuremap targeting .net framework and resolve bi-directional dependency

I've just been banging my head against the wall with this one not sure what's going on.我一直在用头撞墙,不知道发生了什么。

I've got an asp.net core web project targeting .NET 4.7.2 that I've been trying to configure hangfire.我有一个针对 .NET 4.7.2 的 asp.net 核心 web 项目,我一直在尝试配置 hangfire。

public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            var connectionString = Configuration.GetConnectionString("DocumentDbConnection");

            services.AddMvc(o =>
                {
                    o.Filters.Add(typeof(HttpGlobalExceptionFilter));

                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);


            services
                .AddHangfire(x => x.UseSqlServerStorage(connectionString));


            // configure StructureMap Dependency Injection
            var container = new Container();
            container.Configure(config =>
            {
                config.Scan(scan =>
                {
                    scan.TheCallingAssembly();
                    scan.AssembliesAndExecutablesFromApplicationBaseDirectory();
                    scan.WithDefaultConventions();
                    scan.AddAllTypesOf(typeof(IIntegrationEventHandler<>));
                });
// other configurations
                config.Populate(services);
            });

            // tried this too
//GlobalConfiguration.Configuration.UseStructureMapActivator(container);

            return container.GetInstance<IServiceProvider>();
        }

and my configure method:和我的配置方法:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, IContainer container)
        {
            //using Hangfire.StructureMap
GlobalConfiguration.Configuration.UseStructureMapActivator(container);

// exception is thrown on UsingHangfireServer()
            app
                .UseHangfireServer()
                .UseMvc();
        }

I keep getting an exception from StructureMap about a bi-directional dependency:我不断从 StructureMap 收到关于双向依赖的异常:

Bi-directional dependency relationship detected!
Check the StructureMap stacktrace below:
1.) Instance of Hangfire.Client.IBackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
2.) new BackgroundJobFactory(*Default of IJobFilterProvider*, *Default of IBackgroundJobFactory*)
3.) Hangfire.Client.BackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
4.) Instance of Hangfire.Client.IBackgroundJobFactory ('Hangfire.Client.BackgroundJobFactory, Hangfire.Core, Version=1.7.0.0, Culture=neutral, PublicKeyToken=null')
5.) Container.GetInstance(Hangfire.Client.IBackgroundJobFactory)
6.) Container.TryGetInstance(Hangfire.Client.IBackgroundJobFactory)

I've using packages Hangfire.AspNetCore, Hangfire.SqlServer, Hangfire.StructureMap, all v 1.7.0我使用包 Hangfire.AspNetCore、Hangfire.SqlServer、Hangfire.StructureMap,所有 v 1.7.0

I also tried just using the Hangfire package but am unable to configure it in my startup class because none of the extension methods were available.我也尝试过只使用 Hangfire 包,但无法在我的启动类中配置它,因为没有任何扩展方法可用。

Also note that this exact set up works just fine on a project targeting .net core.另请注意,这种确切的设置在针对 .net 核心的项目上工作得很好。

Any advice would be greatly appreciated!任何建议将不胜感激!

Turns out it was an issue with this line in the structuremap configuration:原来这是结构图配置中这一行的问题:

scan.AssembliesAndExecutablesFromApplicationBaseDirectory();

I should have been using something like this instead:我应该使用这样的东西:

scan.AssemblyContainingType<IThumbnailGenerator>(); // directing structuremap to scan the assembly containing this type

this problem is in 1.7+ hangfire version.这个问题是在 1.7+ hangfire 版本中。 I downgraded the version to 1.6.27 and it solved我将版本降级到 1.6.27 并解决了

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM