Unity 是否可能会查找 Lead 上不存在的具体实例特定的属性,并将其分配给新创建的实例属性

问题描述 投票:0回答:2

我是第一次尝试使用 Unity,我想我可能已经贪多嚼不烂了。我们有一个 n 层应用程序,它有一个具有多个抽象类型的基础库,然后在其之上有几个具有具体类型的业务场景特定库。例如:抽象类型 Lead 有两种实现,一种在名为 NewAutomotiveLead 的 NewAutomotiveLibrary 中,一种在名为 AutomotiveFinanceLead 的 AutomotiveFinanceLibrary 中。在基础库中,我们有一组适配器,可以对 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);
  }

注意:这只是为了说明,因为库不知道有关 ILeadDuplication 的 concreate 类的任何信息,实际注册需要在配置文件中完成。

虽然这一切都很有效,但我需要更进一步。调用resolve时,我需要能够传入Lead类型的参数,它是NewAutomotiveLead或AutomotiveFinanceLead的基本类型。

我需要知道 Unity 是否有可能以某种方式神奇地查找特定于具体实例 AutomotiveFinanceLead 的属性,例如 Lead 上不存在的“GrossMonthlyIncome”,并将其分配给新创建的 AutomotiveFinanceLeadDuplication 实例属性 GrossMonthlyIncome。

我实际上希望能够对基础库中的 ILeadDuplication 实例执行一组通用逻辑,即使生成的实例和映射的属性对其不熟悉。

.net architecture dependency-injection unity-container
2个回答
0
投票

不太确定你想要什么,但我的猜测是你想在构建时传递依赖项。这可以通过多种方式完成,但这里有一个例子。

[InjectionConstructor]
public class MyClass([Dependency("Named")] MyOtherClass other)
{

}

为了使其正常工作,名为“Named”的 MyOtherClass 依赖项必须位于容器中,或者通过配置或通过 RegisterType 方法添加它。

如果我偏离了基地,请告诉我,也许我可以进一步帮助您...我在不同情况下使用 Unity 进行了很多工作,因此只要我知道您想要完成什么,我也许可以帮助您.


0
投票

我不明白为什么你希望容器承担这个责任。但我认为你可以这样做:

在调用 Resolve() 获取 ILeadDuplication 的新实例之前,您可以注册要使用的 Lead 实例以及要使用的 GrossMonthlyIncome 值:

  Lead lead = new NewAutomotiveLead()
  container.RegisterInstance<Lead>(lead);
  container.RegisterInstance<int>("GrossMonthlyIncome", lead.GrossMonthlyIncome);
  ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance");

如果具体类型具有名为“GrossMonthlyIncome”的依赖项,则该值将被注入其中。如果具体类型的构造函数采用 Lead 实例,则该实例将被注入到该构造函数参数中。

© www.soinside.com 2019 - 2024. All rights reserved.