Asp.net core 连接两个不同的容器生成器

Asp.net core 连接两个不同的容器生成器,asp.net-core,autofac,asp.net-core-3.1,Asp.net Core,Autofac,Asp.net Core 3.1,我正在从ASP.Net Framework迁移到ASP.Net核心(3.1)应用程序。我是新手。Dependency Inyection在我的旧项目中由Autofac管理。所以我需要复制行为主义者 在我的Startup类中,我需要一个ConfigureContainer。诸如此类: public class Startup { public void ConfigureContainer(ContainerBuilder builder) { // Regist

我正在从ASP.Net Framework迁移到ASP.Net核心(3.1)应用程序。我是新手。Dependency Inyection在我的旧项目中由Autofac管理。所以我需要复制行为主义者

在我的
Startup
类中,我需要一个
ConfigureContainer
。诸如此类:

public class Startup
{

    public void ConfigureContainer(ContainerBuilder builder)
    {
        // Register your own things directly with Autofac, like:

        builder.RegisterType<MyFoo>().As<IMyFoo>();
    }
}
我想加入两个集装箱造船厂在一个。我该怎么做

我看到了执行此操作的
Update()
方法,但它似乎很有用


有什么想法吗?

来自Autofac的官方网站:介绍如何与NetCore和Autofac集成。我还按照本教程完成了类似于您的要求

只需稍微更改一下BootStraper类,即可成为Autofac.Module的派生类。因此,您只需在Startup.cs中添加很少且清晰的代码即可获得好处

Startup.cs

public void配置容器(Autofac.ContainerBuilder生成器)
{
//在此处注册自定义引导程序类型
//如果顺序很重要,只需将其切换到第一行或最后一行即可
builder.RegisterModule();
//直接向Autofac注册您自己的物品,如:
builder.RegisterType().As();
}
BootStraper.cs

公共密封类引导器:Autofac.Module
{
//公共容器生成器生成器{get;set;}
受保护的覆盖无效负载(Autofac.Containerbuilder生成器)
{
基础荷载(建筑商);
builder.RegisterType(typeof(Foo1));
builder.RegisterType(typeof(Foo2));
builder.RegisterType(typeof(Foo3));
builder.RegisterType(typeof(Foo4));
builder.RegisterType(typeof(Foo5));
//RegisterTypeSingleton()可以替换为
//1.直接在此处注册或
//2.在启动时放入ConfigureContainer()节
RegisterType(typeof(Foo6)).SingleInstance();
}
//公共无效注册表类型Singleton(类型)
//{
//RegisterType(type).SingleInstance();
//}
}
创建host builder时不要忘记添加此行

hostBuilder.UseServiceProviderFactory(新的AutofacServiceProviderFactory())

此autofac扩展是来自
autofac.Extensions.DependencyInjection
的NuGet包

什么是
BootStraper
?你如何使用它?你为什么需要保留这个类?@CyrilDurand我编辑了一篇解释这个的帖子。你能改变
引导程序
类吗?一种解决方案是添加第二个构造函数,并将ContainerBuilder作为参数
public sealed class  BootStraper
{
    public ContainerBuilder Builder { get; set; }

    public BootStraper()
    {

        Builder = new ContainerBuilder();            
        Builder.RegisterType(typeof(Foo1));
        Builder.RegisterType(typeof(Foo2));
        Builder.RegisterType(typeof(Foo3));
        Builder.RegisterType(typeof(Foo4));
        Builder.RegisterType(typeof(Foo5));        
   }

   public void RegisterTypeSingleton(Type type)
   {
        Builder.RegisterType(type).SingleInstance();
   }
}