![](/img/trans.png)
[英]Unity container - resolve object which always same constructor parameter
[英]Why “resolve” method always calls the class constructor that is already registered in Unity?
我在WPF應用程序中使用Unity和Prism 。 我有一個以這種方式在Bootstrapper中注冊到Container
的類:
Container.RegisterType<MyClass>();
該類具有一個構造函數,該構造函數具有ILoggerFacade
接口作為參數:
private ILoggerFacade _logger;
public MyClass(ILoggerFacade logger)
{
_logger = logger;
//do some stuff
}
當我嘗試解析該類實例時,我意識到返回實例時會調用類構造函數。 因此,所有工作都是從頭開始的。 我以這種方式解析實例:
MyClass a = Container.Resolve<MyClass>();
在我執行的每個Resolve方法中調用構造函數的原因是什么?
如果您不希望每次解析都實例化組件,則需要將其生命周期聲明為ContainerControlled:
myContainer.RegisterType<MySingletonObject>(new ContainerControlledLifetimeManager());
請參閱https://msdn.microsoft.com/zh-cn/library/dn178463%28v=pandp.30%29.aspx#sec34,但請注意副作用,因為您的對象的行為就像單例一樣
默認情況下(當您不指定其他壽命管理器時),Unity使用過渡壽命管理器。 每次調用resolve時,過渡生命周期管理器都會為您提供一個已注冊類型的新實例。 在注冊期間可以指定其他壽命管理器,這些管理器將提供不同的行為(單例等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.