.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();
            });

 

大功告成~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM