完全懶惰的單身,我有以下代碼實現我一般單供應商:如何創建泛型
public sealed class Singleton<T> where T : class, new()
{
Singleton()
{
}
public static T Instance
{
get { return SingletonCreator.instance; }
}
class SingletonCreator
{
static SingletonCreator()
{
}
internal static readonly T instance = new T();
}
}
這個樣本是從2篇拍攝,我合併的代碼讓我我想要的東西:
http://www.yoda.arachsys.com/csharp/singleton.html and http://www.codeproject.com/Articles/11111/Generic-Singleton-Provider。
這是我嘗試使用上面的代碼:
public class MyClass
{
public static IMyInterface Initialize()
{
if (Singleton<IMyInterface>.Instance == null // Error 1
{
Singleton<IMyInterface>.Instance = CreateEngineInstance(); // Error 2
Singleton<IMyInterface>.Instance.Initialize();
}
return Singleton<IMyInterface>.Instance;
}
}
和接口:
public interface IMyInterface
{
}
在Error 1
的錯誤是:
'MyProject.IMyInterace' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'MyProject.Singleton<T>'
在Error 2
錯誤是:
Property or indexer 'MyProject.Singleton<MyProject.IMyInterface>.Instance' cannot be assigned to -- it is read only
我該如何解決這個問題,以便它符合上面提到的兩篇文章?任何其他想法或建議表示讚賞。
我的實現是否打破Singleton模式?
單身已死; [生命期/範圍應該由依賴注入容器來處理](http://stackoverflow.com/questions/4484619/does-mef-lend-any-value-to-the-singleton-pattern/4484889#4484889)。 – 2012-03-31 12:18:27
當然。創建和控制單個對象的生命週期是單身人士的責任,但是您正在嘗試爲該類別外的單身人員類的實例屬性賦值。從我看到的依賴注入和基於接口的編程中,你真正想要做什麼。 Singleton只在嘗試使用sparce資源(例如數據庫連接)時非常有用,並且應謹慎使用(甚至可以避免) – 2012-03-31 12:22:12
我正在嘗試爲我的web mvc應用程序創建引擎,它處理我需要的所有內容,依賴注入,我只希望這個實例的一個實例存在。 – 2012-03-31 12:36:28