如何创建以下类的单例模式

时间:2015-02-05 09:16:58

标签: c# design-patterns

我有一个类来创建对象上下文。要管理对象创建,我想使用单例模式。如何在C#中创建以下类对象创建模式为singleton?

  public abstract class EFContextBase<TContext> : IDisposable where TContext : ObjectContext, new()
        {
            private TContext _dataContext;
                protected virtual TContext DataContext
            {
                get
                {
                    if ((object)this._dataContext == null)
                        this._dataContext = Activator.CreateInstance<TContext>();
                    return this._dataContext;
                }
            }

  public EFContextBase()
            {
                this.DataContext.ContextOptions.LazyLoadingEnabled = true;
            }
                public void Dispose()
            {
                this.Dispose(true);
                GC.SuppressFinalize((object)this);
            }
                private void Dispose(bool disposing)
            {
                if (!disposing || (object)this._dataContext == null)
                    return;
                this._dataContext.Dispose();
                this._dataContext = default(TContext);
            }
        }

3 个答案:

答案 0 :(得分:1)

为什么要创建一个抽象类Singleton?制作了抽象类,由其他类继承。 Singleton是一种设计模式,用于避免静态方法并保持可能性,使您的类可实现(可能以后使用)。你应该考虑一下你的架构。

一般来说,你应该按照以下方式制作一个单例:

  1. 定义私有构造函数
  2. 定义私有变量:private static readonly <<YourClass>> singleton = new <<YourClass>>()
  3. 定义公共单身人士属性:
  4. public <<YourClass>> Singleton
    {
        get { return singleton; }
    }
    

答案 1 :(得分:0)

基于以下几种单例的经典实现:

  1. 静态构造函数初始化(线程安全设计)
  2. 实例属性getter双重锁定,用于线程安全返回值。
  3. .Net Lazy包装器属性(可以在构造函数中配置为线程安全)。

答案 2 :(得分:0)

不要冒险,从最了解的人那里得到它:http://csharpindepth.com/articles/general/singleton.aspx