Unity——通过构造函数参数解析对象

Unity – Resolving objects by passing constructor parameter

我有以下代码:

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 的具体类型?

干杯,

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

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

然后你可以解析那个实例 class:

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

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

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