我想了解如果我需要在我的結構地圖代碼中使用.singleton()。已經有一個關於這個在stackoverflow(StructureMap singleton)的問題,但我想確定我確定使用正確的語法。答案之一意味着,如果我返回一個類型,我需要使用.singleton(),使我的代碼在這裏:Structureton singleton usage
x.For<IApprovedProgrammesHelper>().Use<ApprovedProgrammesHelper>();
x.For(typeof(ICache<>))
.Use(typeof(CacheHelper<>))
.Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);
應該是這樣的:
x.For<IApprovedProgrammesHelper>().singleton().Use<ApprovedProgrammesHelper>();
x.For(typeof(ICache<>))
.Singleton()
.Use(typeof(CacheHelper<>))
.Dependencies.Add(typeof(TimeSpan), Settings.Instance.HttpCacheExpiration);
這是正確的?還是我誤解了這應該如何工作?我不完全確定這些代碼對於代碼的影響。可能值得一提的是,使用<>語句中的類型無論如何都不遵循單例模式。
感謝您的時間提前 山姆
只有你知道它是否是安全的,有*一個'CacheHelper'和'ApprovedProgrammesHelper'的實例*。如果它(或它的依賴)具有任何(可變)狀態並且不是線程安全的,那麼將它們定義爲單例可能是不明智的。沒有任何人可以爲你回答這個問題,而沒有看到這兩個類的代碼,它們的依賴關係,並且知道這段代碼運行在哪個上下文中(比如框架)。 –
Steven
@Steven你是對的,它讓我花了一點時間才明白,如果你知道所涉及的類/接口的細節,那麼它是唯一真的可以說單體是合適的。你的解釋有助於爲我解釋這個問題 - 使用單例不正確或不正確,它完全取決於上下文。謝謝你的幫助。 –