【问题标题】:Unity – Resolving objects by passing constructor parameterUnity – 通过传递构造函数参数来解析对象
【发布时间】:2017-04-19 09:01:37
【问题描述】:

我有以下代码:

interface IParent
{ }
class Parent1 : IParent
{
  public Parent1 (Document doc)
  {
  }
}
class Parent2 : IParent
{
  public Parent2 (Document doc)
  {
  }
}

我的统一容器配置如下:

Container.RegisterType<IParent, Parent1>("Parent1");
Container.RegisterType<IParent, Parent2>("Parent2");

我正在尝试通过将 Document 的实例传递给其构造函数来解析 IParent 对象(类型为 Parent1 或 Parent2):

string parent = "Parent1";
IParent parent = Container.Resolve<IParent>(parent, new ParameterOverride("Document", doc));

这对我不起作用。使用调试器进入上述行,我进入构造函数,但 Document 为空。也就是说,它看起来像是一个新的 Document(),而不是我在调用 Resolve 时传入的实际文档。

我的问题是如何传入一个 doc 实例来解析一个具体类型的 IParent?

干杯,

【问题讨论】:

    标签: c# dependency-injection unity-container


    【解决方案1】:

    您应该在构造函数中注册 Parent1 并依赖于 Document

        Container.RegisterType<IParent, Parent1>("Parent1", new InjectionConstructor(doc));
    

    那么你可以解析该类的一个实例:

            string parentClass = "Parent1";
            IParent parent = Container.Resolve<IParent>(parentClass);
    

    【讨论】:

      【解决方案2】:

      解决方案是使用构造函数中声明的参数名称而不是实际类型,例如:

      IParent parent = Container.Resolve<IParent>(parent, new ParameterOverride("doc", doc));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多