加入两个不同的ContainerBuilder

问题描述 投票:0回答:1

我正在从ASP.Net Framework迁移到ASP.Net Core(3.1)应用程序。我是新来的。 Depency Inyection是由Autofac在我的旧项目中管理的。因此,我需要复制行为。

我在ConfigureContainer类中需要一个Startup。像这样的东西:

public class Startup
{

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

        builder.RegisterType<MyFoo>().As<IMyFoo>();
    }
}

另一方面,我有一些来自Bootstrapper类的依赖项。 Bootstrapper是另一个项目的类。此类由其他项目调用,因此我无法将其删除。这是一种BaseContainer,具有一些供其他项目使用的服务。

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();
   }
}

我想将两个ContainerBuilder一起加入。我怎样才能做到这一点?

我看到了Update()方法,但是似乎是obsolete

任何想法?

asp.net-core autofac asp.net-core-3.1
1个回答
0
投票

Autofac]中的官方网站:asp-net-core-3-0-and-generic-hosting描述了如何与NetCore和Autofac集成。我还按照本教程完成了类似您的要求。

只需稍微更改BootStraper

类就可以成为Autofac.Module的派生类。因此,您只需在Startup.cs中添加很少的清晰代码即可获得收益,就像这样]

Startup.cs

public void ConfigureContainer(Autofac.ContainerBuilder builder)
{
    // Register your custom BootStraper types here
    // If the ordering matters, just swtich this to the first or last line
    builder.RegisterModule<BootStraper>();   

    // Register your own things directly with Autofac, like:
    builder.RegisterType<MyFoo>().As<IMyFoo>();
}

BootStraper.cs

public sealed class  BootStraper : Autofac.Module
{
    public ContainerBuilder Builder { get; set; }
    protected override void Load(Autofac.Containerbuilder builder)
    {
        base.Load(builder);

        builder.RegisterType(typeof(Foo1));
        builder.RegisterType(typeof(Foo2));
        builder.RegisterType(typeof(Foo3));
        builder.RegisterType(typeof(Foo4));
        builder.RegisterType(typeof(Foo5)); 

        // RegisterTypeSingleton() could be replaced by registering directly here or ConfigureContainer() in Startup
        builder.RegisterType(typeof(Foo6)).SingleInstance();
    }

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

创建主机构建器时请不要忘记添加此行。

hostBuilder.UseServiceProviderFactory(new AutofacServiceProviderFactory())

此autofac扩展名是Autofac.Extensions.DependencyInjection中的软件包。

© www.soinside.com 2019 - 2024. All rights reserved.