我是第一次尝试使用 Unity,我想我可能咬得比我能咀嚼的多。我们有一个 n 层应用程序,它有一个包含几个抽象类型的基础库,然后在它之上有几个特定于业务场景的库和具体类型。例如:抽象类型lead 有两种实现,一种在NewAutomotiveLibrary 中称为NewAutomotiveLead,另一种在AutomotiveFinanceLibrary 中称为AutomotiveFinanceLead。在基本库中,我们有一组适配器,它们对基本类型(如 Lead)执行逻辑。
我第一次尝试使用 Unity 返回一个接口 ILeadDuplication,当我在 ILeadDuplication 上调用 resolve 并传递“NewAutomotive”或“AutomotiveFinance”的字符串值时,该接口在解析时返回 NewAutomotiveLeadDuplication 或 AutomotiveFinanceLeadDuplication 的实例(在容器上调用 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);
}
注意:这是为了说明,因为库对 ILadDuplication 的创建类一无所知,实际注册需要在配置文件中完成。
虽然这一切都很好,但我需要更进一步。调用 resolve 时,我需要能够传入 Lead 类型的参数,它是 NewAutomotiveLead 或 AutomotiveFinanceLead 的基本类型。
我需要知道 Unity 是否有可能以某种方式神奇地查看特定于具体实例 AutomotiveFinanceLead 的属性,例如 Lead 上不存在的“GrossMonthlyIncome”,并将其分配给新创建的 AutomotiveFinanceLeadDuplication 实例属性 GrossMonthlyIncome。
我实际上希望能够针对基础库中的 ILeadDuplication 实例执行一组通用逻辑,即使生成的实例和映射的属性对它不熟悉。
谢谢!