繁体   English   中英

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

干杯,

您应该在构造函数中注册对Document具有依赖关系的Parent1

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

那么您可以解析该类的实例:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM