ASP.NET Core와 기본 제공 컨테이너를 사용하고 있습니다. 내 등록을 Autofac으로 이전하고 싶습니다.ASP.NET 코어의 컨테이너에서 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이 상당히 복잡하기 때문에 어딘가에 약간의 뉘앙스가 빠져 있습니다.
UPDATE
댓글은 지금까지 "그런데 왜"다양한하지만 (나는 그 의견의 일부 우리의 이유를 설명했습니다 불구하고) 그 문제가되지 않습니다. 이것은 정당한 질문입니다. 두 용기를 모두 사용해 본 경험이 있다면 정말 감사드립니다.
(이러한 설명에 대한 간략한 요약 - 오랜 기간의 경험을 토대로 우리는 같은 일을하는 두 가지 방법을 제공하는 것이 결코 좋은 생각이 아니라는 것을 알았습니다. 한 가지 방법을 고수하고 그것에 충실하십시오. 이제부터 1 년 후 몇 가지 주니어 개발자가 뭔가를 혼란에 빠뜨릴 것입니다.)
좋아 보인다 그런데 왜 단순히 등록을 유지하지만의 [autofac 추상화 (https://www.nuget.org/packages/Autofac.Extensions.DependencyInjection/)를 사용? –
@JoelHarkes 우리가 지금 가지고있는 것입니다. 그러나 우리는 두 가지 방법으로 일을하지 않는 것이 더 좋다고 결정했습니다. 이는 유지 보수를 줄이고 가독성을 떨어 뜨리고 혼란을 가중시키는 것입니다. 우리는 Autofac을 채택 했으므로 모두 들어 있어야합니다. – grokky
추상화의 요점은 모든 것이 필요하지 않기 때문입니다. 컨테이너를 전환하려면 모든 시작 코드를 다시 작성할 필요가 없습니다 . –