簡體   English   中英

Microsoft Unity,解決兩個類似的依賴關系?

[英]Microsoft Unity, Resolving two similar dependencies?

我有一個使用Unity的場景,這有點讓人困惑......假設我有一個AuthenticationService來驗證用戶,並且成功使用TextLogger類或DbLogger類成功登錄到文本文件或數據庫。 通常我將在我的項目中使用的類我將在我的模塊類中正確注冊,如下所示:

public class LoggingModule
{
    IUnityContainer _iocContainer;

    public LoggingModule(IUnityContainer container)
    {
        _iocContainer = container;
    }

    public void Init()
    {
        //Add any logic here to look in a config file, check a property
        //or any other condition to decide which implementation is registered.

        //register the database logger to the ILogger interface
        _iocContainer.RegisterType(typeof(ILogger), typeof(DBLogger));

    }
}

這將被注入我的身份驗證服務的構造函數中。 但是,如果我想在我的應用程序中的不同點使用兩個記錄器,首先在Init方法中注冊兩種類型,即TextLogger和DBLogger? 其次,我的容器如何知道要解決哪種類型?

請幫忙....

將兩種類型注冊到具有名稱的容器中,即;

container.RegisterType<ILogger, DBLogger>("DBLogger");
container.RegisterType<ILogger, TextLogger>("TextLogger");

並使用name參數解析您的類型,即;

var logger = container.Resolve<ILogger>("DBLogger");

除非您使用嵌套容器並自己調用Resolve ,否則Unity將提供應用程序范圍的解決方案而不是方案驅動的解決方案。

您可以使用嵌套的Unity容器實現您想要的功能,但您可能最好在自己的代碼中執行解決方案,尤其是嵌套容器方法更適用於在應用程序范圍的解決方案中處理“規則的例外”。

您將需要一個代碼塊來確定適合每個實例的具體類型。 然后可以將此代碼推送到更高級別的控制/編排類中,該類將相應的具體類型注入到從屬實例中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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