簡體   English   中英

為什么“ resolve”方法總是調用已經在Unity中注冊的類構造函數?

[英]Why “resolve” method always calls the class constructor that is already registered in Unity?

我在WPF應用程序中使用UnityPrism 我有一個以這種方式在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM