Microsoft DI ServiceProvider에 대한 지연 종속성 주입

5276 단어 iocdotnetdilazy
의존성 주입은 고품질 코드를 달성하기 위한 강력한 도구이자 표준입니다. 그러나 현재 요청에 사용되지 않는 인스턴스가 생성될 수 있으므로 성능 및 메모리 소비에 부정적인 영향을 미칠 수 있습니다.

문제와 코드를 오염시키지 않고 문제를 정상적으로 해결할 수 있는 하나의 솔루션에 대해 자세히 설명했습니다. 이 솔루션은 IoC 컨테이너에 LazyProxy을 사용하는 것입니다. 주요 아이디어는 실제 유형의 객체를 프록시로 대체하는 것입니다. 이 프록시는 특정 인터페이스T를 구현하고 Lazy<T> 를 통해 이 인터페이스의 모든 멤버를 호출한 런타임 생성 유형입니다. 따라서 Lazy<T> 인터페이스 대신 T가 주입된 것처럼 동작이 변경됩니다. 인스턴스는 요청 시에만 생성되지만 동시에 코드는 깨끗한 상태를 유지합니다.

오늘 LazyProxy 컨테이너를 하나 더 사용할 수 있게 되었음을 알려드립니다. LazyProxy.ServiceProvider 라이브러리는 Microsoft's DI ServiceProvider 에 대한 지연 종속성 주입을 허용합니다.

이 라이브러리의 사용법은 이미 존재하는 라이브러리LazyProxy.UnityLazyProxy.Autofac과 유사합니다.

다음은 이 라이브러리를 사용하는 방법의 예입니다. 다음 인터페이스 및 구현을 고려하십시오.

public interface IFoo
{
    void Bar();
}

public class Foo: IFoo
{
    public Foo() => Console.WriteLine("Ctor");
    public void Bar() => Console.WriteLine("Bar");
}


이 서비스에 대한 지연 등록은 다음과 같이 추가할 수 있습니다.

// Creating a service collection
var services = new ServiceCollection();

// Adding a lazy registration
services.AddLazyScoped<IMyService, MyService>();

// Building the service provider
var serviceProvider = services.BuildServiceProvider()


등록된 서비스의 다음 사용법을 고려하십시오.

Console.WriteLine("Resolving the service...");
var foo = serviceProvider.GetService<IFoo>();

Console.WriteLine("Executing the 'Bar' method...");
foo.Bar();


출력:

Resolving the service...
Executing the 'Bar' method...
Ctor
Bar


출력에서 볼 수 있듯이 생성자는 메서드Bar에 대한 첫 번째 호출이 수행될 때까지 호출되지 않습니다.

LazyProxy.ServiceProvider 라이브러리의 이니셔티브와 훌륭한 초기 구현은 전적으로 에 속하며, 이에 대해 전체 오픈 소스 커뮤니티를 대신하여 감사와 감사를 표하고 싶습니다. 게다가 Carlos는 다른 모든 LazyProxy의 리포지토리와 함께 새 리포지토리를 이동하는 것을 관대하게 허용했습니다. 이는 게으른 종속성 주입 아이디어에서 큰 진전이었습니다.

GitHub 저장소



LazyProxy
LazyProxy.Autofac
LazyProxy.Unity
LazyProxy.ServiceProvider

좋은 웹페이지 즐겨찾기