심층 분석 - ASP.NET Core 종속성 주입의 Autofac 통합
ASP.NET에서 Autofac의 사용법을 빠르게 탐색한 다음 핵심에 대한 세부 정보를 살펴보겠습니다. ASP.NET Dependency Injection의 구현과 함께 이것은 분명하지는 않지만 흥미로운 디자인입니다.
설치 및 사용
설치는 간단합니다. ASP.NET 응용 프로그램의 참조Autofac.Extensions.DependencyInjection
.
애플리케이션에서 Autofac을 사용하려면 Host
를 생성하는 클래스로 이동합니다. 일반적으로 이것은 Program.cs
및 insert .UseServiceProviderFactory(new AutofacServiceProviderFactory())
입니다.
다음과 같이 보일 수 있습니다.
public class Program
{
public static void Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>())
.Build();
host.Run();
}
}
이렇게 하면 ASP.NET Core 애플리케이션에서 Autofac을 DI 컨테이너로 사용할 수 있습니다.
그런 다음 ConfigureContainer
메서드를 Startup
클래스에 추가하고 Autofac 사용자로 익숙한 ContainerBuilder
를 사용하여 컨테이너를 구성할 수 있습니다.
public void ConfigureContainer(ContainerBuilder builder){
builder.RegisterAssemblyModules(typeof(Startup).Assembly);
}
통합은 또한 IServiceCollection의 등록에 대한 종속성을 지원합니다. 따라서 ASP.NET 종속성 주입 등록만 지원하는 라이브러리가 있는 경우 걱정할 필요가 없습니다. 응용 프로그램에서 사용할 수 있습니다.
이러한 메서드는 환경 기반 명명 규칙도 지원합니다. 나는 그들의 팬이 아니지만 Autofac docs 에서 규칙을 찾을 수 있습니다.
무엇이 등록되어 있습니까?
통합의 핵심은 AutofacServiceProviderFactory
입니다.
ServiceProviderFactory는 ASP.NET 종속성 주입 내의 추상화입니다. 종속성 주입 프레임워크를 ASP.NET과 함께 사용할 수 있도록 하여 종속성에 대한 통합 구성을 갖는 이점(프레임워크에 유용하므로 한 가지 구성 스타일만 지원하면 됨)과 기존 DI 컨테이너의 성능을 결합합니다. .
그래서 두 가지 목적이 있습니다.
첫 번째: DI 컨테이너 빌더를 만들고 이를 ASP.NET ServiceCollection의 종속성으로 채웁니다. 그런 다음 개발자는 추가 종속성을 구성하거나 Autofac 메커니즘을 사용하여 등록된 종속성을 교체할 수 있습니다.
두 번째: 컨테이너를 빌드하고 프레임워크에서 사용할 ServiceProvider로 래핑합니다.
범위 추가
DI 컨테이너와 ASP.NET을 사용하면 개체와 해당 종속성에 대해 서로 다른 범위가 있음을 알 수 있습니다.
기본 사례는 Singleton 및 PerDependency입니다. 여기서 Singleton은 응용 프로그램당 개체에 있고 PerDependency는 개체를 필요로 하는 모든 종속성에 대해 개체를 만듭니다.
HTTP 프레임워크에서 일부 상태 애플리케이션 전체를 공유하고 싶지만 일부 종속성은 요청당 한 번이어야 합니다.
예는 ORM의 UnitOfWork
입니다. 종속성이 요청에 대해 요구하면 전체 요청에 대해 동일하게 유지되어야 합니다UnitOfWork
.
따라서 LifetimeScope
(Autofac 용어) 또는 ServiceScope
(ASP.NET 용어)가 존재합니다.
새로운 요청이 시작될 때 생성되고 요청이 완료되면 삭제됩니다.
ASP.NET은 이러한 ServiceScope
s를 생성하기 위해 팩토리가 필요합니다. ContainerBuilder Autofac을 채울 때 ASP.NET에서 해결할 수 있도록 이 팩토리( AutofacServiceScopeFactory
)를 자체에 추가합니다.
이것이 ASP.NET에 통합되는 방식도 흥미롭습니다. 요청의 HttpContext가 생성되면 ServiceScopeFactory
에 대한 참조를 얻습니다.
서비스가 요청에서 처음 확인되면 ServiceScope
를 인스턴스화하여 이 범위에 대해 구성된 모든 종속성을 해결합니다.
결론
Autofac 통합은 ASP.NET Core용 DI 컨테이너 구현에서 예상대로 구현됩니다.
가장 흥미로운 점은 컨테이너가 ASP.NET에서 해결하기 위해 자체 구현을 등록하는 방법입니다.
몇 달 전에 이것을 디버깅할 때 이 세부 사항을 놓쳤으므로 내 오류가 DI 통합에 있는 것으로 의심됩니다. 분명히 내가 잘못했어...
Reference
이 문제에 관하여(심층 분석 - ASP.NET Core 종속성 주입의 Autofac 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ggmueller/deep-dive-autofac-integration-in-asp-net-core-dependency-injection-3f3a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public class Program
{
public static void Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>())
.Build();
host.Run();
}
}
public void ConfigureContainer(ContainerBuilder builder){
builder.RegisterAssemblyModules(typeof(Startup).Assembly);
}
통합의 핵심은
AutofacServiceProviderFactory
입니다.ServiceProviderFactory는 ASP.NET 종속성 주입 내의 추상화입니다. 종속성 주입 프레임워크를 ASP.NET과 함께 사용할 수 있도록 하여 종속성에 대한 통합 구성을 갖는 이점(프레임워크에 유용하므로 한 가지 구성 스타일만 지원하면 됨)과 기존 DI 컨테이너의 성능을 결합합니다. .
그래서 두 가지 목적이 있습니다.
첫 번째: DI 컨테이너 빌더를 만들고 이를 ASP.NET ServiceCollection의 종속성으로 채웁니다. 그런 다음 개발자는 추가 종속성을 구성하거나 Autofac 메커니즘을 사용하여 등록된 종속성을 교체할 수 있습니다.
두 번째: 컨테이너를 빌드하고 프레임워크에서 사용할 ServiceProvider로 래핑합니다.
범위 추가
DI 컨테이너와 ASP.NET을 사용하면 개체와 해당 종속성에 대해 서로 다른 범위가 있음을 알 수 있습니다.
기본 사례는 Singleton 및 PerDependency입니다. 여기서 Singleton은 응용 프로그램당 개체에 있고 PerDependency는 개체를 필요로 하는 모든 종속성에 대해 개체를 만듭니다.
HTTP 프레임워크에서 일부 상태 애플리케이션 전체를 공유하고 싶지만 일부 종속성은 요청당 한 번이어야 합니다.
예는 ORM의
UnitOfWork
입니다. 종속성이 요청에 대해 요구하면 전체 요청에 대해 동일하게 유지되어야 합니다UnitOfWork
.따라서
LifetimeScope
(Autofac 용어) 또는 ServiceScope
(ASP.NET 용어)가 존재합니다.새로운 요청이 시작될 때 생성되고 요청이 완료되면 삭제됩니다.
ASP.NET은 이러한
ServiceScope
s를 생성하기 위해 팩토리가 필요합니다. ContainerBuilder Autofac을 채울 때 ASP.NET에서 해결할 수 있도록 이 팩토리( AutofacServiceScopeFactory
)를 자체에 추가합니다.이것이 ASP.NET에 통합되는 방식도 흥미롭습니다. 요청의 HttpContext가 생성되면
ServiceScopeFactory
에 대한 참조를 얻습니다.서비스가 요청에서 처음 확인되면
ServiceScope
를 인스턴스화하여 이 범위에 대해 구성된 모든 종속성을 해결합니다.결론
Autofac 통합은 ASP.NET Core용 DI 컨테이너 구현에서 예상대로 구현됩니다.
가장 흥미로운 점은 컨테이너가 ASP.NET에서 해결하기 위해 자체 구현을 등록하는 방법입니다.
몇 달 전에 이것을 디버깅할 때 이 세부 사항을 놓쳤으므로 내 오류가 DI 통합에 있는 것으로 의심됩니다. 분명히 내가 잘못했어...
Reference
이 문제에 관하여(심층 분석 - ASP.NET Core 종속성 주입의 Autofac 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ggmueller/deep-dive-autofac-integration-in-asp-net-core-dependency-injection-3f3a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(심층 분석 - ASP.NET Core 종속성 주입의 Autofac 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ggmueller/deep-dive-autofac-integration-in-asp-net-core-dependency-injection-3f3a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)