41 votes

Le service WCF peut-il avoir des constructeurs?

Lorsque je crée un service WCF dans ma solution, puis-je procéder comme suit: avoir un constructeur avec un paramètre à transmettre? Si oui, comment, quand et à quel moment le moteur d'exécution remplit-il l'objet IBusinessLogic requis?

 [ServiceContract]
public interface IServiceContract
{
    [OperationContract]
    ...
}

public class MyService : IServiceContract
{
    IBusinessLogic _businessLogic;
    public ServiceLayer(IBusinessLogic businessLogic)
    {
        _businessLogic = businessLogic;
    }
    ...
}
 

13voto

Kev Points 60744

Dès que WCF utilisera uniquement le constructeur par défaut, vous ne pouvez pas utiliser de constructeurs paramétrés. Vous devez faire un peu plus de travail pour faire des constructeurs paramétrés d’appel WCF.

Vous pouvez essayer ceci:

Comment puis-je transmettre des valeurs au constructeur sur mon service wcf?

6voto

Mark Cidade Points 53945

Regardez ServiceHostFactory .

6voto

Vous pouvez obtenir de la WCF de tri (indirectement) appel non constructeurs par défaut, pour que cela fonctionne vous devez rouler votre propre instance de fournisseur. Vous devez mettre en œuvre IInstanceProvider et ajouter un Service personnalisé Comportement. Quelques liens qui vont vous montrer comment faire cela en combinaison avec Spring.NET:

Service WCF Injection de Dépendance

Exemple de Code de Service WCF Injection de Dépendance

4voto

Yossi Dahan Points 3697

Un autre cas, en plus des autres réponses, concerne la création d'un service singleton - c'est le moment où vous transmettez une instance de votre service au ServiceHost (par opposition à un type);

Évidemment, lorsque vous créez l'instance, vous pouvez utiliser n'importe quel constructeur.

Cette approche nécessitera l'ajout d'un attribut à votre service: [ServiceBehavior (InstanceContextMode.Single)];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X