.Net Core 3.0依赖注入替换 Autofac

Posted ncorecoder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Core 3.0依赖注入替换 Autofac相关的知识,希望对你有一定的参考价值。

今天早上,喜庆的更新VS2019,终于3.0正式版了呀~

有小伙伴问了一句Autofac怎么接入,因为Startup.ConfigureServices不能再把返回值改成IServiceProvider了,原来的替换依赖注入容器就不可行了,我随口说了一下Host上面.UseServiceProviderFactory

本以为就这么简单,他问我要个例子,自己折腾了一下,发现事情没有这么简单

.UseServiceProviderFactory<TContainer>要搭配Startup里面写一个ConfigureContainer(TContainer builder)

Autofac官方的IServiceCollection.AddAutofac内部实现其实是一个单例的容器注入了IServiceProviderFactory<ContainerBuilder>

技术图片

 但是不在UseServiceProviderFactory<TContainer>里面配置的话,就只能

            services.AddAutofac(container=>
            
            );

而且不能有ConfigureContainer(ContainerBuilder builder),要不然会提示

技术图片

 

 

比如我们有个MyClass

    public class MyClass
    
        public void Hello()
        
            Console.WriteLine("Hello");
        
    

我们配置一下

Host

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

然后

Startup.ConfigureContainer

        public void ConfigureContainer(ContainerBuilder builder)
        
            builder.RegisterType<MyClass>().SingleInstance();
        

 

或者

            services.AddAutofac(container=>
            
                container.RegisterType<MyClass>().SingleInstance();
            );

 

大功告成~~~

以上是关于.Net Core 3.0依赖注入替换 Autofac的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core自定义依赖注入容器,替换自带容器

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

.NET Core 3.0 之初识Host源码