Question

J'ai posé des questions liées à cela, mais n'a toujours aucune réponse concluante, donc voici une question plus simple.

considère cela.J'ai 2 interfaces.On décrit un DAO.L'une est une interface WCF.L'interface WCF hérite de l'interface DAO afin d'exposer ses méthodes avec des attributs WCF.Parce que c'est une interface WCF, je dois bien entendu déclarer les méthodes afin de placer des attributs de WCF sur eux tels que [OperationContract].En conséquence, je suis en train de masquer les méthodes d'interfaces précédentes et de placer le mot-clé «Nouveau».Est-ce la bonne chose à faire dans cette situation.J'ai besoin de pouvoir présenter les méthodes d'interface DAO via l'interface WCF d'où la raison de la héritage.Je veux forcer l'interface WCF à avoir ces fonctions exposées.Il semble que mes mains soient plutôt liées et que je dois utiliser cette approche afin d'obtenir les méthodes exposées, mais que pensez-vous?

en termes de code, il ressemblerait à ceci:

//The dao interface
public interface IMyDao
{
    void Foo();
}

//The wcf interface which implements/extends the IMyDao interface in order to add wcf attributes
[ServiceContract]
public interface IMyWCF : IMyDao
{
    [OperationContract]
    new void Foo();
}

//The dao class that implements the dao interface
public class MyDao : IMyDao
{
    public void Foo()
    {
        //Do something
    }
}

//The class implements the wcf interface. Makes calls to the dao.
public class MyWCF : IMyWCF
{
    public void Foo()
    {
        MyDao myDao = new MyDao();

        myDao.Foo();  
    }
}

Était-ce utile?

La solution

Utilisez 2 interfaces - Ne partagez pas une interface pour un DAO et un contrat WCF

Inclure une enveloppe qui traverse les appels de service de la WCF au DAO.

Donc, par exemple, si votre DAO a la méthode suivante:

public interface IMyDAO
{
    MyObject GetMyObjectById(int Id);
}

Vous auriez votre contrat d'opération avec la même signature:

public interface IMyWCFContract 
{
    [OperationContract]
    MyObject GetMyObjectById(int Id);
}

Et puis vous auriez une classe wrapper:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

     public MyWCFService()
     {
        dao = new MyDAO(); 
     }

     public MyObject GetMyObjectById(int id)
     {
        return dao.GetMyObjectById(id);
     }
}

Un plan alternatif peut être d'envisager d'utiliser un service reposant à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top