Context .Предположим, что у нас есть следующая IDocument
иерархия и IFunctionary
, ответственность за которую должна обрабатывать IDocument
s.
interface IDocument { }
interface IOrder : IDocument { }
interface IBill : IDocument { }
interface IFunctionary<TDoc> where TDoc : IDocument {
void Treat(TDoc document);
}
Также есть другое ветвление: предположим, у нас есть две фазы обработки документов, описываемые классами DocumentPreparation
и DocumentAcceptance
.
class DocumentPreparation {
public DocumentPreparation(
IFunctionary<IOrder>[] orderFunctionaries,
IFunctionary<IBill>[] billFunctionaries
) { }
}
class DocumentAcceptance {
public DocumentAcceptance(
IFunctionary<IOrder>[] orderFunctionaries,
IFunctionary<IBill>[] billFunctionaries
) { }
}
Намерение .Я хотел бы предоставить все реализации IFunctionary<TDoc>
из пространства имен Preparation
в DocumentPreparation
и все реализации IFunctionary<TDoc>
из пространства имен Acceptance
в DocumentAcceptance
.
Вопрос ,Как мне настроить Unity Container , чтобы добиться этого?
Что я пробовал .Я могу получить все необходимые типы и зарегистрировать их под разными именами или с одинаковыми именами.Но код unity.Resolve<IFunctionary<IOrder>[]>("Preparation")
возвращает все реализации IFunctionary<IOrder>
независимо от имен, с которыми они были зарегистрированы.Таким образом, кажется невозможным использовать простые именованные регистрации для разделения реализаций по группам.