![](/img/trans.png)
[英]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.