C #: наследование одного интерфейса к другому, которое будет действовать как интерфейс WCF

StackOverflow https://stackoverflow.com//questions/11685319

Вопрос

Я задал вопросы, связанные с этим, но все еще нет окончательных ответов, поэтому вот более простой вопрос.

Рассмотрим это.У меня есть 2 интерфейса.Один описывает дао.Один - интерфейс WCF.Интерфейс WCF наследует интерфейс DAO, чтобы разоблачить его методы с атрибутами WCF.Поскольку это интерфейс WCF, который я должен, конечно, снова объявить методы, чтобы разместить атрибуты WCF на них, такие как [applycontract].В результате я влияет, скрывая предыдущие методы интерфейсов и должен поместить ключевое слово «новое» на них.Это правильная вещь, чтобы сделать в этой ситуации.Мне нужно иметь возможность представить методы интерфейса DAO через интерфейс WCF, следовательно, причина наследования его.Я хочу заставить интерфейс WCF иметь эти функции открытыми.Кажется, мои руки скорее связаны, и что я должен использовать этот подход, чтобы получить раскрытые методы, но что вы думаете?

в кодовых терминах это будет выглядеть так:

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

Это было полезно?

Решение

Используйте 2 интерфейса - не разделяйте один интерфейс для DAO и договора WCF

Включите обертку, которая проходит через вызовы сервисов WCF в DAO.

Так, например, если ваш DAO имеет следующий метод:

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

У вас будет ваш контракт на работу с той же подписью:

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

И тогда у вас будет класс обертки:

public class MyWCFService : IMyWCFContract
{
     private MyDAO dao;

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

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

Альтернативный план, возможно, рассмотреть возможность использования использования redful Сервис вместо этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top