2011-01-02 2 views
4

구조 맵을 사용하여 일련의 데코레이터를 연결하려고하지만 몇 가지 문제가 있습니다.데코레이터 패턴 및 복수 데코레이터가있는 구조 맵

this question을 읽었습니다. 하나의 데코레이션 클래스를 가질 수는 있지만, 여러 레벨의 데코레이터를 사용할 수는 없습니다. 내가 가진 클래스는 매개 변수로 연결 문자열을 취한 다음 클래스 B와 클래스 C 모두 클래스 A의 데코레이터입니다. 구조적으로 B를 생성하여 A를 래핑 할 수는 있지만 C 래핑 B 래핑하는 것처럼 보입니다. A.

이 1 개 레벨로 작동합니다

For<IQuestionRepository>() 
       .Use<LinqToSqlQuestionRepository>() 
        .Ctor<string>("connectionString") 
        .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString) 
       .EnrichWith (x=>new RecentQuestionCachedRepository(x)) 

난 그냥 다른 EnrichWith를 추가하는과 같이 일 것이라고 생각 :

For<IQuestionRepository>() 
       .Use<LinqToSqlQuestionRepository>() 
        .Ctor<string>("connectionString") 
        .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString) 
       .EnrichWith (x=>new RecentQuestionCachedRepository(x)) 
       .EnrichWith (y=>new FeaturedQuestionCachedRepository(y)); 

을하지만 그냥 나에게 LinqToSqlQuestionRepository를 감싸는 FeaturedQuestionCachedRepository을 제공합니다 그러나 최근 퀘스트 onCachedRepository는 스택의 어느 곳에도 없습니다.

내가 뭘 잘못하고 있니?

답변

7

는 하나의 EnrichWith의 호출을 수행

.EnrichWith (x=> 
    new FeaturedQuestionCachedRepository(
    new RecentQuestionCachedRepository(x) 
) 
) 
+0

바하마을! 당신이 그것을 지적했을 때 너무 분명해 보인다! 고마워. –