2013-08-14 3 views
1

Я использую указанную выше библиотеку в своем веб-приложении vb.net. Человек, который разработал снеговик, сказал, что вы не должны создавать новый экземпляр каждый раз, когда хотите получить идентификатор, вы должны использовать базовый синглтон.SnowMaker .Net библиотека для Azure

Я знаю, что такое одиночные игры, но никогда не использовали их. Я наткнулся на это на переполнение стека

Public NotInheritable Class MySingleton 
    Private Shared ReadOnly _instance As New Lazy(Of MySingleton)(Function() New 
     MySingleton(), System.Threading.LazyThreadSafetyMode.ExecutionAndPublication) 

    Private Sub New() 
    End Sub 

    Public Shared ReadOnly Property Instance() As MySingleton 
     Get 
      Return _instance.Value 
     End Get 
    End Property 
End Class 

Вот код, я использую для генерации идентификаторов

Dim storageAccount As CloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings("blobStorage").ConnectionString) 
Dim ds As New BlobOptimisticDataStore(storageAccount, "container-name") 

Dim generator = New UniqueIdGenerator(ds) 
Dim ret = generator.NextId(table) 

, который работает, но как я могу включить, что в класс одноплодной, так что я звоните только один раз из своего веб-приложения?

ответ

1

Синглтон - это статический объект, который вы можете вызвать столько раз, сколько хотите, и быть уверенным, что он будет запускать только один вызов за раз.

Вы не создаете экземпляр singleton, это как класс или глобальный объект, который вы только что вызываете. Вы гавань включен код UniqueIdGenerator, но ваш код может выглядеть примерно так:

Imports SnowMaker 
Imports Microsoft.WindowsAzure.Storage 

Module Module1 

    Sub Main() 
     Dim storageAccount = CloudStorageAccount.Parse("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx") 
     Dim ds As New BlobOptimisticDataStore(storageAccount, "vhds") 

     MySingleton.Instance.DataSource = ds 
     MySingleton.Instance.Table = "table" 
     Dim myid = MySingleton.Instance.NextId 
     Dim myid2 = MySingleton.Instance.NextId 
     Dim myid3 = MySingleton.Instance.NextId 
     Dim myid4 = MySingleton.Instance.NextId 

    End Sub 

End Module 

Тогда ваш одноплодной код назовет ваш генератор

Imports SnowMaker 

Public NotInheritable Class MySingleton 
    Private Shared ReadOnly _instance = New Lazy(Of MySingleton)(Function() New MySingleton(), System.Threading.LazyThreadSafetyMode.ExecutionAndPublication) 
    Private _generator As UniqueIdGenerator 

    Private Sub New() 
    End Sub 

    Public Shared ReadOnly Property Instance() As MySingleton 
     Get 
      Return _instance.Value 
     End Get 
    End Property 

    Private _ds As BlobOptimisticDataStore 
    Public Property DataSource() As BlobOptimisticDataStore 
     Get 
      Return _ds 
     End Get 
     Set(ByVal value As BlobOptimisticDataStore) 
      _ds = value 
     End Set 
    End Property 

    Private _tableName As String 
    Public Property Table() As String 
     Get 
      Return _tableName 
     End Get 
     Set(ByVal value As String) 
      _tableName = value 
     End Set 
    End Property 

    Private _Id As Integer 
    Public ReadOnly Property NextId() As Integer 
     Get 
      If _generator Is Nothing Then 
       _generator = New UniqueIdGenerator(_ds) 
      End If 
      Return _generator.NextId(_tableName) 
     End Get 
    End Property 

End Class 
+0

Спасибо за вашу помощь, но я до сих пор понятия не имеют. Когда я вставляю это в visual studio 2012, я получаю всевозможные ошибки intelisense. В основном все, что я делаю это, который работает, когда вы называете его 'Dim storageAccount Как CloudStorageAccount = CloudStorageAccount.Parse (ConfigurationManager.ConnectionStrings ("blobStorage"). ConnectionString) Dim DS Как Новый BlobOptimisticDataStore (storageAccount" xploite-иды ") Dim генератор = Новый UniqueIdGenerator (Ds) Dim ORDERNUMBER = generator.NextId (" orderNumbers ")' – user2682322

+0

Но, запустив его несколько раз дает вам следующие идентификационные номера назад 1, 101, 201, 301 Это потому, что идентификаторы выдаются партиями по 100. То, что я пытаюсь сделать, это получить 1, 2, 3, 4, т.е. работать только с функцией как только партия закончилась. Нет примеров, которые я могу найти где угодно. – user2682322

+0

В принципе, вам нужно один раз нажать на источник данных и таблицу, но несколько раз вызовите nextid. – paqogomez

 Смежные вопросы

  • Нет связанных вопросов^_^