소스중에 닫답한 부분 질문드립니다.

아래는 유니티컨테이너를 이용해서 인젝션 구현( 이부분은 없습니다.) 하고
그 상황에서 인젝션된 객체의 타입(클래스)를 가져와 비교하여 변수에 담는 … 건데요

제가 알고 싶은것은 이러한 유니티 처러방법을 다 알고 있어야 하는 건지요?
다른 개발자분들도 이걸 다알고 개발하시는 건가요?

아니면 그냥 어디서 혹은 누군가가 이렇게 해놓은 것을 가져다 쓰는 것인가요 거의 똑같이요
어셈블리나 유니티 메소드등이 어떤 역할을 하는 지 에 관련등등이요.

파고 들어가도 그냥 getter, setter 처리 , 컬렉션 반환 구문등 너무 어렵네요…

CONTAINER.AddExtension(new Diagnostic());

// 대표적인 타입을 기준으로 어셈블리 호출
var injectTypeList = Assembly.GetAssembly(initialType).GetTypes()
    .Where(t =>
        t.CustomAttributes.Where(t2 => t2.AttributeType == typeof(InjectionAttribute)).Count() > 0);

foreach (var typeItem in injectTypeList)
{
    // 사용자 정의 속성 조회
    var attr = typeItem.CustomAttributes.Where(t => t.AttributeType == typeof(InjectionAttribute)).SingleOrDefault();
    string serviceName = attr.NamedArguments.Where(na => na.MemberName == "ServiceName").SingleOrDefault().TypedValue.Value.Nvl();
    Type interfaceType = attr.NamedArguments.Where(na => na.MemberName == "InterfaceType").SingleOrDefault().TypedValue.Value as Type;
    Type interceptorType = attr.NamedArguments.Where(na => na.MemberName == "InterceptorType").SingleOrDefault().TypedValue.Value as Type;
    LifeCycle lifeCycle = (LifeCycle)attr.NamedArguments.Where(na => na.MemberName == "LifeCycle").SingleOrDefault().TypedValue.Value;
    var typeLifeTime = TypeLifetime.Singleton;
}
1개의 좋아요

저는 유니티 컨테이너를 사용해본 경험은 없어서 유니티 컨테이너의 복잡도에 대한 답은 힘들 듯 하고요(다른 IoC에 비해 좀 복잡해 보이기는 합니다),

공유주신 소스코드는 어셈블리에서 사용자 특성(Attribute) 중 [Injection]이 부여된 대상을 조회해서 등록하는 코드로 보입니다. (전체 코드는 아니여서 짐작을 합니다) 이 특성의 속성을 조회해서 필요로 하는 설정 값을 취득하는 것으로 보이는데요,

조금 사용성은 복잡해 보이기는 하지만 아마도 동일한 패턴이 여러번 반복되는 구조이지 않을까 예상을 해봅니다.

유니티 컨테이너를 다른 것으로 교체할 수 있는 상황이 아니라면 여러 패턴들을 기록한 뒤 동작방식을 분석하는게 어떨까 하는데요? 막상 패턴을 정리해보면 그닥 많지 않을 수 있어요. (대략 10개 정도의 패턴 정도로 수렴)

문서는 아마 이것으로 보이는데, 먼저 패턴 분석을 해보시고 그룹화 하신 후 그룹화 한 것을 하나씩 정복하시는게 어떨까 합니다.

http://unitycontainer.org/tutorials/Composition/composition.html

2개의 좋아요