2009-05-19 4 views
2

Wenn ich eine Service-Definition/Umsetzung wie folgt aus:Wie ein Objekt in einem WCF-Dienst injizieren

ServiceHost host = new ServiceHost(typeof(UpdateService), someEndpointAddress); 

Dann, nach einer Schaffung:

using System; 
using System.ServiceModel; 

namespace aspace.service 
{ 
    [ServiceContract(Namespace = "http://aspace.service")] 
    public interface IUpdate 
    { 
    [OperationContract] 
    ConfirmationMessage UpdatePerson(string PersonIdentifier); 
    } 
} 

public class UpdateService : IUpdate 
{ 
    public ConfirmationMessage UpdatePerson(string PersonIdentifier) 
    { 
     // some implementation here 
    } 
} 

ich einen Servicehost wie folgt erstellen binden und hinzufügen metadatabehavior, ich kann den Host öffnen. Dies wird nach einer Anfrage von einem Client UpdatePerson (aPersonIdentifier) ​​aufrufen.

Ich möchte mit einer Datenbank von UpdatePerson sprechen. Antworten auf a previous question of mine schlagen vor, dass ich Abhängigkeitsinjektion für diese Art von Sache verwenden sollte.

Das Problem ist, dass ich nie eine Instanz der Klasse UpdateService erstellen. Wie kann ich eine Abhängigkeit injizieren? Wie würdest du das lösen?

Danke, Grüße, Miel.

Antwort

2

Schauen Sie sich die Schnittstelle IInstanceProvider an. Grundsätzlich müssen Sie diese Schnittstelle implementieren und in der Methode GetInstance die WCF-Klasse selbst instanziieren und Abhängigkeiten bereitstellen.

0

Wenn Sie beabsichtigen, Ihre Abhängigkeiten zu injizieren, sollten Sie einen IoC-Container in Betracht ziehen. Z.B. Windsor.

Wenn Sie Windsor verwenden, gibt es eine WCF-Integrationsfunktion, die automatisch alle Abhängigkeiten in Ihren Dienst einfügt. Schau es dir an here.

2

Grundsätzlich müssen Sie einen IInstanceProvider implementieren, der auf Ihrem IOC-Container basiert, und einen IServiceBehaviour, der den von Ihnen geschriebenen Instanzprovider verwendet. Dadurch kann der IOC-Container Ihre Objekthierarchie für Sie aufbauen.

Es gibt ein example implementation here

+0

+1, weil das Beispiel mir geholfen, den Code hinter den Links in der akzeptierten Antwort zu verstehen – Miel

Verwandte Themen