不支持带有Autofac throw IServiceProvider的Ne​​t Core 3.0 [英] Net core 3.0 with Autofac throw IServiceProvider isn't supported

查看:165
本文介绍了不支持带有Autofac throw IServiceProvider的Ne​​t Core 3.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试解决问题时遇到了一些麻烦,我将Autofac与.net core 3.0-6preview一起使用。
我将 new AutofacServiceProviderFactory()添加到 CreateHostBuilder中,在此.net核心版本框架中这是必需的。
代码在2.1版及更低版本中正常运行,但现在应用程序崩溃了。

I have some trouble i try to resolve problem i use Autofac with .net core 3.0-6preview. I add new AutofacServiceProviderFactory() to CreateHostBuilder which is require in this .net core version framework. The code was working correctly in version 2.1 and lower but now application was crashed


例外:
系统。 NotSupportedException:'不支持配置服务返回System.IServiceProvider。'

The exception: System.NotSupportedException: 'ConfigureServices returning an System.IServiceProvider isn't supported.'

程序类代码:

     public class Program
    {
        public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

启动类:

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public IContainer ApplicationContainer { get; private set; }


        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            var builder = new ContainerBuilder();
            builder.Populate(services);
            builder.RegisterModule(new ContainerModule(Configuration));
            ApplicationContainer = builder.Build();
            return new AutofacServiceProvider(ApplicationContainer);
        }



        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApplicationLifetime appLifetime)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });


            var jwtSettings = app.ApplicationServices.GetService<JwtSettings>();
            var generalSettings = app.ApplicationServices.GetService<GeneralSettings>();
            if (generalSettings.SeedData)
            {
                var dataInitializer = app.ApplicationServices.GetService<IDataInitializer>();
                dataInitializer.SeedAsync();
            }

            //           app.UseMvc();
            appLifetime.ApplicationStopped.Register(() => ApplicationContainer.Dispose());

        }
    }


推荐答案

用于配置Autofac的启动语法已更改。

Startup syntax has changed for configuring Autofac.

相反,在启动中执行以下操作

Instead, in Startup do the following

public void ConfigureServices(IServiceCollection services) {
    //... normal registration here

    // Add services to the collection. Don't build or return
    // any IServiceProvider or the ConfigureContainer method
    // won't get called.
}

public void ConfigureContainer(ContainerBuilder builder) {
    //configure auto fac here
    builder.RegisterModule(new ContainerModule(Configuration));
}

参考适用于ASP.NET Core 3.0+的Autofac文档

这篇关于不支持带有Autofac throw IServiceProvider的Ne​​t Core 3.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆