2014-11-20 2 views
-2

내가 언급 한 ioc 프레임 워크는 Unity, Autofac, 구조 맵 등입니다.왜 일부 ioc 프레임 워크는 너무 복잡합니까? 단지 몇 줄의 코드 만이 작업을 수행 할 수있는 것 같습니다.

public class Ioc 
{ 
    private static readonly Dictionary<Type, Type> mapper = new Dictionary<Type, Type>(); 

    public static T CreateInstance<T>() 
    { 
     var t = typeof (T); 
     if (mapper.ContainsKey(t)) 
     { 
      return (T) Activator.CreateInstance(mapper[t]); 
     } 
     return Activator.CreateInstance<T>(); 
    } 

    public static void Map<TInterface, TImplementation>() where TImplementation : TInterface 
    { 
     var inferfaceType = typeof (TInterface); 
     var implementationType = typeof (TImplementation); 
     if (mapper.ContainsKey(inferfaceType)) 
     { 
      mapper[inferfaceType] = implementationType; 
     } 
     else 
     { 
      mapper.Add(inferfaceType, implementationType); 
     } 
    } 
} 

그리고 그것은 다음과 같이 사용할 수 있습니다 :

코드는

Ioc.Map<IUserService, UserService>(); 
Ioc.Map<IUserBusiness, UserBusiness>(); 

var userService = Ioc.CreateInstance<IUserService>() 

그것은 바로 IOC 프레임 워크를 사용하는 방식처럼 사용된다 .

성능간에 큰 차이가 있습니까?

+2

귀하의 솔루션은'UserService'가'UserBusiness'을 필요로하는 경우를 어떻게 처리합니까? 솔루션은 'UserService'가 싱글 톤이어야하지만 'UserBusiness'는 요청 당 (예 : 웹 애플리케이션)이어야하는 경우를 어떻게 처리합니까? 단일 어셈블리에서 여러 서비스를 사용하는 경우 서비스 확장 규모는 어떻게됩니까? –

답변

3

성능에 '큰 차이'가 있는지 여부는 상황에 따라 완전히 다릅니다. 문제는 귀하의 경우에 충분히 빠르며 귀하의 모든 요구 사항을 해결할 수 있습니까?

this very interesting comparison between different DI libraries for .NET을 살펴보십시오. the major 8 라이브러리와 다른 여러 작은 성능 사이의 성능을 비교합니다.

성능 이외에도 많은 도움이 될 수있는 여러 가지 기능이 있습니다. 예를 들어 Castle Windsor 및 Simple Injector의 일부 라이브러리에는 '진단 서비스'가 포함되어있어 진단하기가 매우 어려울 수있는 잘못된 구성 (예 : captive dependencies 및 기타 여러 가지 오류)을 찾을 수 있습니다. 예를 들어 Simple Injector는 매우 엄격한 design principles을 따르므로 사용자가 할 수있는 구성 오류를 최소화하려고합니다.

DI 라이브러리의 내부 구현을 훨씬 더 복잡하게 만드는 기타 기능은 라이프 스타일 관리, 자동 배선, 주기적 종속성 검색, 콜렉션 분석, 일반 유형 해결과 같은 기능입니다. 모든 종류의 다양한 프레임 워크 및 기술과의 통합을 잊지 마십시오.

일반적으로 미니 DI 라이브러리를 사용하는 것은 권장하지 않습니다. 기존 DI 라이브러리 중 하나를 사용하거나 컨테이너를 전혀 사용하지 마십시오. DI 라이브러리를 사용하지 않는 것이 종속성 삽입 패턴을 사용하지 않는 것과 같습니다. 종속성 주입을 절대적으로 적용해야하지만, 응용 프로그램의 경우 whether or not a DI library is beneficial은 응용 프로그램의 크기에 따라 다릅니다. 응용 프로그램이 작 으면 Composition Root에서 모든 개체 그래프를 수동으로 와이어 링하는 것은 수치스럽지 않습니다. 장점은 무료로 컴파일 타임 지원을받을 수 있다는 것입니다.

관련 문제