J'ai besoin d'utiliser ceci AutoFac
dans ASP core 3.0
Lorsque j'utilise ce code dans le démarrage:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddControllers();
return services.BuildAutofacServiceProvider();
}
Cela me montre cette erreur:
'ConfigureServices renvoyant un System.IServiceProvider n'est pas pris en charge.'
Et je change le program.cs par ceci:
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>();
});
}
Mais cela n'a pas été résolu.
Il s'agit de BuildAutofacServiceProvider()
Code:
public static IServiceProvider BuildAutofacServiceProvider(this IServiceCollection services)
{
var ContainerBuilder = new ContainerBuilder();
ContainerBuilder.Populate(services);
ContainerBuilder.AddService();
var container = ContainerBuilder.Build();
return new AutofacServiceProvider(container);
}
Comment puis-je résoudre ce problème?
La syntaxe de démarrage a changé pour la configuration d'Autofac pour ASP.NET Core 3.0+
En plus d'utiliser les éléments suivants sur le générateur d'hôte
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
Dans Startup
faites le format suivant
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.
services.AddControllers();
}
// ConfigureContainer is where you can register things directly
// with Autofac. This runs after ConfigureServices so the things
// here will override registrations made in ConfigureServices.
// Don't build the container; that gets done for you. If you
// need a reference to the container, you need to use the
// "Without ConfigureContainer" mechanism shown later.
public void ConfigureContainer(ContainerBuilder builder) {
//configure auto fac here
builder.AddService();
//...
}
Référence documentation Autofac pour ASP.NET Core 3.0+