Domanda

Ho fatto alcune domande relative a questo, ma non ho ancora risposte conclusive, quindi ecco una domanda più semplice.

Considera questo.Ho 2 interfacce.Uno descrive un DAO.Uno è un'interfaccia WCF.L'interfaccia WCF eredita l'interfaccia DAO al fine di esporre i suoi metodi con gli attributi WCF.Poiché è un'interfaccia WCF che devo ovviamente dichiarare di nuovo i metodi per effettuare attributi WCF su di essi come [OperationContalct].Di conseguenza sono in effetti nascondendo i precedenti metodi di interfacce e devono posizionare la parola chiave "nuova" su di esse.È questa la cosa corretta da fare in questa situazione.Devo essere in grado di presentare i metodi di interfaccia DAO tramite l'interfaccia del WCF, quindi il motivo per ereditarlo.Voglio forzare l'interfaccia del WCF di avere queste funzioni esposte.Sembra che le mie mani siano piuttosto legate e che devo usare questo approccio per ottenere i metodi esposti, ma cosa ne pensi?

In termini di codice sembrerebbe questo:

//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();  
    }
}
.

È stato utile?

Soluzione

Utilizzare 2 interfacce - non condividere un'interfaccia per un DAO e un contratto WCF

include un wrapper che passa attraverso le chiamate del servizio WCF al DAO.

Quindi, ad esempio se il tuo DAO ha il seguente metodo:

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

Avresti il contratto di funzionamento con la stessa firma:

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

E poi avresti una classe wrapper:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

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

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

Un piano alternativo può essere considerato in considerazione l'utilizzo di un Riposo Servizio invece.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top