gpt4 book ai didi

.net - 从 ASP.NET Core 的容器迁移到 Autofac

转载 作者:行者123 更新时间:2023-12-02 01:15:34 25 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 及其内置容器。我想将我的注册迁移到 Autofac。

Autifac docs没有“迁移指南”,所以我想确保我做的事情正确。

ASP.NET Core container             -> Autofac
---------------------- -------

// the 3 big ones
services.AddSingleton<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>().SingleInstance()
services.AddScoped<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>().InstancePerLifetimeScope()
services.AddTransient<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>().InstancePerDependency()

// default
services.AddTransient<IFoo, Foo>() -> builder.RegisterType<Foo>().As<IFoo>()

// multiple
services.AddX<IFoo1, Foo>();
services.AddX<IFoo2, Foo>(); -> builder.RegisterType<Foo>().As<IFoo1>().As<IFoo2>().X()

// without interface
services.AddX<Foo>() -> builder.RegisterType<Foo>().AsSelf().X()

还有更多的变化(例如代表, IEnumerable<>),但这些是主要的。

这样对吗?我是否在某处错过了一些细微差别,因为 Autofac 非常复杂。

更新
到目前为止的评论都是“但为什么”的种类,但这并不重要(尽管我已经在其中一些评论中解释了我们的推理)。这是一个合理的问题。 如果您对这两个容器都有经验,我非常感谢您的意见。

(作为对这些解释的简短总结——在我们多年的经验中,我们学到了一种艰难的方式,即提供两种方法来做同一件事从来都不是一个好主意,因为它会增加 100% 的失败几率。所以选择一种方式并坚持下去。一年后,一些初级开发人员会因为对其他选择感到困惑而搞砸了一些事情。)

最佳答案

您应该使用 .AddXxx来自 Microsoft.Extensions.DependencyInjection 的方法注册并通过 IServiceCollection到 autofac。

这使得更容易在容器之间进行更改。

当然,如果您需要 Autofac/3rd 方 IoC 容器的某些功能(自动发现等),那么您需要使用容器 native 方法。

private readonly IContainer container;
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// your normal registrations
services.AddSingleton<IMySingleton,MySingleton>();

var builder = new ContainerBuilder();
builder.Populate(services);

// build container
container = builder.Build();

// and return it
return new AutofacServiceProvider(container);
}

关于.net - 从 ASP.NET Core 的容器迁移到 Autofac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42809618/

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