2013-08-14 6 views
1

내 vb.net 웹 앱에서 위의 라이브러리를 사용하고 있습니다. 스노우 메이커를 개발 한 사람은 ID를 원할 때마다 새로운 인스턴스를 생성해서는 안되며 기본 싱글 톤을 사용해야한다고 말했다.SnowMaker. 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 

에 걸쳐 온 내가 생성하는 데 사용하고 코드 인 ID의

작동하지만, 어떻게 싱글 톤 클래스에 있음을 통합 할
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) 

그래서 I 내 웹 앱에서 한 번만 호출 할 수 있습니까?

답변

1

싱글 톤은 원하는만큼 여러 번 호출 할 수 있고 한 번에 하나의 호출 만 실행하도록 보장 할 수있는 정적 개체입니다.

싱글 톤을 인스턴스화하지 않습니다. 클래스 레벨이나 방금 호출 한 전역 개체와 같습니다. 당신은 UniqueIdGenerator에 대한 코드를 포함 havent 한, 그러나 당신의 코드를 다음과 같이 보일 수 있습니다 :

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에 붙여 넣으면 모든 종류의 인텔리 센스 오류가 발생합니다. 기본적으로 내가 뭘 모든 당신이 CloudStorageAccount = CloudStorageAccount.Parse (ConfigurationManager.ConnectionStrings ("blobStorage"). ConnectionString을) 새로운 BlobOptimisticDataStore (storageAccount으로 희미한 DS "로 '희미한 storageAccount를 호출 할 때, 어떤 작품이있다 xploite-ID를 ") 희미한 발생 = 새 UniqueIdGenerator (DS) 희미한 주문 번호 = generator.NextId ("orderNumbers ")가' – user2682322

+0

하지만, 여러 번 실행하는 당신을 다시 다음 ID 번호를 제공 1, 101, 201, 301 ID가 100의 일괄 처리로 발행되기 때문입니다. 내가하려는 것은 1, 2, 3, 4를 얻는 것입니다. 즉 함수 만 실행하는 것입니다. 일괄 처리가 끝나면 내가 어디서든 찾을 수있는 예는 없습니다. – user2682322

+0

기본적으로 데이터 소스와 테이블을 한 번 푸시해야하지만 nextid를 여러 번 호출해야합니다. – paqogomez