.NET IoC 라이브러리 성능 비교

우연히 검색하다가 발견했습니다.

정말 다양한 프레임워크가 있네요.

AutoFac, Ninject, SimpleInjector, Caliburn.Micro, Microsoft Extensions DependencyInjection 외에는 모두 처음 들어봅니다.
제가 사용하는 DevExpress에서는 SimpleInjector를 이용한 예제를 많이 제공해주기 때문에 저도 SimpleInjector를 사용하고 있습니다.

3개의 좋아요

이미 도입되었을 수 도 있겠지만… 리플렉션 또는 ILGenerator를 사용하지 않고 코드 생성기를 이용해서 IoC를 제공하는 방식이 결국엔 Winner가 될 것 같다는 생각을 해봅니다.

1개의 좋아요

IoC 컨테이너들의 특징이 런타임이라는 것인데요, 코드 생성기는 컴파일 타임에 결정되는데… 혹시 어떤 식으로 그런 면들이 보완될지 좀 더 자세한 설명이 가능할까요? ^^

3개의 좋아요

네. 이렇게 생각을 해보았습니다. IoC에서 Type으로 주입을 하는 경우는 해당되지 않고요, 제네릭을 통해 주입되는 케이스가 될 것 같은데, 해당의 경우, 소스 생성기를 통해 인스턴스의 생성 및 생성자의 인자에 주입이 가능할 것으로 생각했습니다.

그리고 참고로 위의 Winner의 표현은 해당 링크가 Performance라 Performance Winner의 의미로 썼습니다;

2개의 좋아요

@dimohy 님께서 말씀하신 컨셉이 어떤 것인지 흥미롭습니다. 다만 제가 아는 선에서도 IoC 컨테이너가 IL Emitter 대신에 코드 제네레이터를 어떻게 활용할 수 있는가는 역시 그림이 잘 그려지지 않습니다.

IoC 이야기는 아니지만, 코드 제네레이터가 뭔가 공통된 동작을 주입한다는 관점에서는 AOP를 구현하는 것 정도가 생각나긴 하는데, 기회가 되면 @dimohy 님의 이야기를 좀 더 들어보고 싶습니다.

2개의 좋아요

완전한 리스트는 아니지만, Scott Handselman 님께서 정리해놓으신 블로그 아티클에도 업계에서 많이 통용되는 IoC 컨테이너들이 잘 정리/소개되어있습니다.

개인적으로는 Castle Windsor와 Microsoft Unity (게임 엔진의 Unity가 아닙니다. 과거에 Patterns & Practice 시리즈를 출간하면서 소개된 Enterprise용 프레임워크의 한 파트입니다.)를 써보고 싶었는데 열심히 개발할 때 이걸 도입해보는 걸 놓쳤네요 ㅎㅎ

List of .NET Dependency Injection Containers (IOC) - Scott Hanselman’s Blog

2개의 좋아요

제 생각으로는 Source Generator가 Ioc 컨테이너에 약간의 도움이 될 수 있는 부분이 있는 것 같습니다.

예를 들어 몇몇 Ioc 컨테이너 사용자들을 보면, 구현체 등록 과정을 자동화하려는 코드를 심심치않게 볼 수 있습니다.
그 방법은 대개 Application의 스타트 지점에서 어셈블리에 포함된 타입을 풀 스캔해 미리 규약한 컨벤션에 맞는 구현체를 자동 등록하는 코드였습니다.

이런 사례에서는 Source Generator가 도움이 된다고 생각합니다.
스캔 없이 등록하는 Generator를 만들 수 있으니…

추가적으로 이것을 남길게요!

3개의 좋아요