今天早上,喜慶的更新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(); });
大功告成~~~