VSTO / COM的单例实现

时间:2012-04-02 11:47:17

标签: c# .net singleton vsto

基本上,我要做的是创建Word的Singleton实例,这样我的其他类就无法创建重复的进程。

public sealed class WordSingleton
{
    private static Word.Application _App = null;

    WordSingleton() { }

    public static Word.Application App
    {
        get
        {
            if (_App == null)
                _App = new Word.Application();                 

            return _App;
        }
    }

    // dispose the singleton from a single place
    public static void Dispose()
    {
        if (_App != null)
            _App.Quit();

        Marshal.ReleaseComObject(_App);
    }
}

我一直在努力解决这个问题,最终想出了这个。我想知道专家是否可以告诉我我的使用情况 - 如果正确,不正确,需要改进吗?我来自不同的技术,所以这对我来说很新鲜。

2 个答案:

答案 0 :(得分:3)

以下是我将如何做到这一点。使用readonly关键字使其无法替换。这也是线程安全的。

public sealed class WordSingleton 
{     

  public static readonly Word.Application Instance = new Word.Application();      

  private WordSingleton() { } 

}

答案 1 :(得分:1)

为什么不在类范围内初始化?

private static Word.Application _App = new Word.Application();

这样的单身人士将由CLR控制。经常处理它。