我想使用autofac injection代替默认的.net core解决方案。
这是我的启动文件。
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc(option => option.EnableEndpointRouting = false) ;
var cb = new ContainerBuilder();
cb.RegisterModule<mydependecymodule>();
cb.Populate(services);
var container = cb.Build();
return new AutofacServiceProvider(container);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseDeveloperExceptionPage();
app.UseStatusCodePages();
app.UseStaticFiles();
app.UseMvc(routes=>routes.MapRoute("default","/{controller=home}/{action=index}"));
}
下面是我的program.cs
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseServiceProviderFactory(new AutofacServiceProviderFactory());
但是当我运行我的应用程序时,我在我的主方法中得到这个错误。
System.NotSupportedException: 'ConfigureServices returning an System.IServiceProvider isn't supported.'
在ASP.NET Core 3.0中,ASP.NET Core的托管模型发生了变化,你不能返回一个 "服务"。IServiceProvider
不再是。这在Autofac文档中被记录下来,用于集成ASP.NET Core 3.0+。.
你必须切换你的 ConfigureServices
是无效的,如果你想直接在Autofac注册东西,你需要使用 ConfigureContainer
. 您还需要注册 AutofacServiceProviderFactory
在你 Program.Main
方法。文档中有一些例子展示了如何做到这一点。