gpt4 book ai didi

c# - 注册一个 Autofac 模块并返回 IServiceCollection

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:14 25 4
gpt4 key购买 nike

我将 API 配置分为两个项目(主要项目和次要项目)。在主体 Startup.cs 中,我配置了 Autofac,在辅助中,我使用了主体返回的 IServiceCollection。

要注册一个 Autofac 模块,我应该编码:

public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddMvc();

var container = new ContainerBuilder();
container.Populate(services);
container.RegisterModule(new ApplicationModule());
return new AutofacServiceProvider(container.Build()); // Instead of 'return services;'
}

如果您看到返回的类型,它是 IServiceProvider 而不是 IServiceCollection。如何注册一个模块,但返回 IServiceCollection?我尝试从 IServiceProvider 转换为 IServiceCollection,但引发了异常。

最佳答案

在我看来,您的 autofac 设置不正确。请看看我在下面概述的内容。

程序.cs

 public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(collection => collection.AddAutofac()) //Important
.Build();

启动.cs

   public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void ConfigureContainer(ContainerBuilder builder)
{
container.RegisterModule(new ApplicationModule());
}

由于程序中的 .ConfigureServices(collection => collection.AddAutofac()) 行,ConfigureContainer(ContainerBuilder builder) 被自动调用(放置断点:) ) 在你的启动类中,容器是在你当前的 api 中构建和注册的,如果你将它复制到你的辅助 api,你就不必担心将你的服务集合从一个 api 传递到另一个 api,每个 api 都会注册它的自己的依赖。

还要确保您安装了 Autofac.Extensions.DependencyInjection nuget 包!

关于c# - 注册一个 Autofac 模块并返回 IServiceCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com