Каскадное разрешение в Unity - PullRequest
0 голосов
/ 04 июня 2009

Предположим, у меня есть два типа, TypeA и TypeB, которые я хочу зарегистрировать в Unity. TypeB зависит от TypeA, поэтому я хочу внедрить TypeA в тип B с помощью инжектора конструктора. Поэтому я хотел бы написать что-то вроде следующего и сделать так, чтобы Unity был достаточно умен, чтобы каскадировать разрешение для меня:

_container.RegisterType<ITypeA, TypeA>();
_container.RegisterType<ITypeB, TypeB>();

Как я могу сказать Unity разрешить TypeA и ввести в TypeB?

Похоже, что это возможно при использовании файла конфигурации, но я не знаю, как бы вы сделали это программно:

<type name="typeB" type="ITypeB" mapTo="TypeB">
   <lifetime type="Singleton"/>
   <typeConfig extensionType="...">
      <constructor>
        <param name="typeA" parameterType="ITypeA">
           <dependency/>
        </param>
      </constructor>
   </typeConfig>
</type>

Заранее спасибо за любые предложения!


РЕДАКТИРОВАТЬ: Итак, Unity справляется с этим для меня. Тем не менее, я думаю, что моя проблема в том, что у меня есть класс с двумя конструкторами:

public TypeB(TypeA typeA)
{
    _x = typeA;
}

public TypeB() : this(Something.Value)
{
}

Похоже, у Unity возникли проблемы с пониманием, какой конструктор использовать. Первый конструктор предназначен для модульного тестирования, а второй должен использоваться во время выполнения. Единство испытывает проблемы с этим.

1 Ответ

1 голос
/ 06 июня 2009

Вы делаете это так:

class TypeA
{
}

class TypeB
{

    [InjectionConstructor]
    public TypeB([Dependency] TypeA typeOfA)
    {

    }
}
...