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));
我有以下代码:
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));