Шаблон декоратора и карта структуры с несколькими декораторами - PullRequest
4 голосов
/ 02 января 2011

Я пытаюсь подключить серию декораторов, используя карту структуры, но у меня возникли некоторые проблемы.

Я прочитал этот вопрос , который привел меня к тому, что я могу иметь один украшенный класс, но я не могу заставить работать несколько уровней декоратора. У меня есть класс A, который принимает строку соединения в качестве параметра, а затем класс 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));

но это просто дает мне FeaturedQuestionCachedRepository, который оборачивает LinqToSqlQuestionRepository, но RecentQuestionCachedRepository не находится нигде в стеке.

Что я делаю не так?

1 Ответ

7 голосов
/ 02 января 2011

Сделайте это за один вызов EnrichWith:

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