Структура карты использует другой конкретный тип в зависимости от типа объекта - PullRequest
1 голос
/ 08 марта 2010

У меня есть конкретный тип по умолчанию, определенный в реестре:

    ForRequestedType<IXRepository>()
        .TheDefaultIsConcreteType<CacheXRepository>();

ChaceXRepository имеет следующий конструктор:

открытый класс CacheXRepository: IXRepository {

    public CacheXRepository(IXRepository xRepository,ICache cacheService){

В конструкторе он получает объект, который имеет тот же тип интерфейса, что и он сам, но я хочу передать другой конкретный тип.

Как определить в реестре, что если тип является CacheXRepository, то я хочу, чтобы конкретный тип для параметра IXRepository был XRepository, во всех остальных случаях IXRepository должен разрешаться в CacheXRepository.

Ответы [ 2 ]

2 голосов
/ 08 марта 2010

Вы должны взглянуть на метод обогащения. Тогда код будет выглядеть примерно так:

      ForRequestedType<IXRepository>().TheDefault.Is
            .OfConcreteType<XRepository>()
            .EnrichWith(
            (context, repository) =>
            new CacheXRepository(repository));

Посмотрите эту страницу для получения дополнительной информации: http://codebetter.com/blogs/jeremy.miller/archive/2008/01/27/interception-techniques-in-structuremap-2-5.aspx

0 голосов
/ 08 марта 2010

Как насчет чего-то вроде (не тестет):

ForRequestedType<IXRepository>()
  .TheDefaultIsConcreteType<CacheXRepository>()
  .WithCtorArg("xREpository")
  .EqualTo(new XRepository());

Я не очень знаком с этим диалектом Structuremap:)

В версии, которую я использую, это будет:

For<IXRepository>()
  .Use<CacheXRepository>()
  .CtorDependency<IXRepository>("xRepository")
  .IsConcreteType<XRepository>();
...