我正在从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
任何想法?
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
中的软件包。