Я пытаюсь использовать Unity в первый раз и думаю, что мог откусить больше, чем смогу пережевывать. У нас есть n-уровневое приложение, которое имеет базовую библиотеку с несколькими абстрактными типами, а затем несколько библиотек, специфичных для бизнес-сценариев, с конкретными типами. Например: у абстрактного типа есть две реализации, одна в NewAutomotiveLibrary с именем NewAutomotiveLead, а другая в AutomotiveFinanceLibrary с именем AutomotiveFinanceLead. В базовой библиотеке у нас есть набор адаптеров, которые выполняют логику для базовых типов, таких как Lead.
Я впервые пытаюсь использовать Unity для возврата интерфейса ILeadDuplication, который при разрешении возвращает либо экземпляр NewAutomotiveLeadDuplication, либо AutomotiveFinanceLeadDuplication, когда я вызывал resolv для ILeadDuplication, и передает либо строковое значение либо «NewAutomotive», либо « AutomotiveFinance "(имена отображаются при вызове RegisterType для контейнера). Вот так:
using (IUnityContainer container = new UnityContainer())
{
container
.RegisterType<ILeadDuplication, AutomotiveFinanceLeadDuplication>("AutomotiveFinance")
.RegisterType<ILeadDuplication, NewAutomotiveLeadDuplication>("NewAutomotive");
ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance");
Console.WriteLine(dupe.Created);
}
ПРИМЕЧАНИЕ. Это для иллюстрации, поскольку библиотека ничего не знает о классах concreate для ILeadDuplication, поэтому фактическую регистрацию необходимо выполнить в файле конфигурации.
Хотя все это прекрасно работает, мне нужно сделать еще один шаг вперед. При вызове resolver мне нужно передать аргумент типа Lead, который является базовым типом для NewAutomotiveLead или AutomotiveFinanceLead.
Мне нужно знать, возможно ли, чтобы Unity каким-то волшебным образом выглядела свойство, специфичное для конкретного экземпляра AutomotiveFinanceLead, такого как "GrossMonthlyIncome", который не существует в Lead, и назначило его новому созданному свойству экземпляров AutomotiveFinanceLeadDuplication GrossMonthlyIncome.
Мне бы очень хотелось иметь возможность выполнять общий набор логики для экземпляров ILeadDuplication в базовой библиотеке, даже если бы создаваемые экземпляры и отображаемые свойства были ей незнакомы.
Спасибо!