[英]Passing constructor parameters when resolving types in Unity: Best practice
[英]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.