2017-05-10 3 views
3
builder.Register(c => new ChannelFactory<IBuildingInfoService> 
    ("BasicHttpBinding_IBuildingInfoService")) 
       .SingleInstance(); 


    builder.Register(c => c 
    .Resolve<ChannelFactory<IBuildingInfoService>>().CreateChannel()) 
       .As<IBuildingInfoService>() 
       .UseWcfSafeRelease(); 

ich diese Zeilen Code in Dependency Injection für WCF-Client bekommen haben ..Autofac mit wcf

Kann jemand erklären, wie es funktioniert ..?

Wie funktioniert die Einzelinstanz?

Was macht channel Factory intern?

Antwort

2

SingleInstance

Das Obige ist eine Singleton erzeugen. Sie erhalten die gleiche Instanz jedes Mal, wenn Sie es anfordern.

There are different ways to create a WCF Client and Channel Factory is one of them. Die Channel Factory-Klasse wird verwendet, um einen Kanal zwischen dem Client und dem Server zu erstellen, ohne einen Proxy zu erstellen.

Wenn Sie eine Kanalfactory erstellen, ruft sie intern Open auf.

Sie können die source code here sehen und wenn Sie graben, ruft CreateChannel schließlich EnsuredOpen.

protected void EnsureOpened() 
    { 
     base.ThrowIfDisposed(); 
     if (this.State != CommunicationState.Opened) 
     { 
      lock (this.openLock) 
      { 
       if (this.State != CommunicationState.Opened) 
       { 
        this.Open(); 
       } 
      } 
     } 
    } 
+0

Aber wie ich es testen und prüfen, ob zwei Instanzen zurück die ein und dasselbe sind .. denn wenn ich zwei Instanzen Rücken an Rücken Lösung getestet und verglichen sie mit Operator == i falsches Ergebnis bekam. – Abi

+0

@Abi Das ist eine andere Frage als die, die du gepostet hast. Davon abgesehen können Sie Object.ReferenceEquals versuchen https://msdn.microsoft.com/en-us/library/system.object.referenceequals(v=vs.110).aspx –