2017-02-12 42 views
-1

我有如何解決這種AspNetCore場景的正確方法?

Singleton<ICache, LocalClusterCache> 
Singleton<ICache, CloudCache> 
在同一個控制器

我希望同時使用,但DI不會允許我可以改用

Singleton<LocalClusterCache, LocalClusterCache> 
Singleton<CloudCache, CloudCache> 

,但我不認爲它正確的方式

另一個問題:

我想Singleton<ICache, LocalCache>是InternalApiController中的不同實例和PublicAPIControlle中的不同實例裏可以使用專用靜態無功那些控制器內,它的工作,但它不是M $「DI」模式,即時通訊混淆的第一個問題

services.AddSingleton<ClassA>(); // same interface 
services.AddSingleton<ClassB>(); 
// then in controller 
SomeInterface classA = (ClassA)provider.GetService(typeof(ClassA)); 
SomeInterface classB = (ClassB)provider.GetService(typeof(ClassB)); 

,做工作

編輯解決方案(不知道如果它的百分之百正確的方式做M $方式)

回答

1

如果依賴關係是上下文的,創建一個抽象工廠並將其註冊到注入容器是很常見的。通過這種方式,受撫養人有機會根據工廠所提供的內容進行挑選,而無需立即將其綁定到具體的類別。

+0

我編輯帖子添加一個可能的解決方案, 添加單獨的工廠類添加了大量的開銷(沒人想要它) 但仍然不知道如何解決第二個問題,我的意思是同一類的DI單例,但單獨每個控制器都可以很容易地通過靜態私有屬性來完成,但它不是DI然後 – gdpm

+0

@gdpm它可能只是一個非常小的類,它記錄了緩存策略選擇,我沒有看到任何問題。但確定請求具體的類,容器將幫助它們的依賴關係(如果有的話),所以我仍然很看重這樣做。 – Joppe