[英]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.