C # : WCF 인터페이스 역할을하는 다른 인터페이스를 상속합니다.
-
12-12-2019 - |
문제
나는 이것과 관련하여 몇 가지 질문을했지만, 여기서는 결정적인 답변이 없으므로 더 간단한 질문이 있습니다.
이것을 고려하십시오.나는 2 개의 인터페이스가있다.하나는 DAO를 설명합니다.하나는 WCF 인터페이스입니다.WCF 인터페이스는 WCF 속성을 사용하여 메소드를 노출하기 위해 DAO 인터페이스를 상속합니다.WCF 인터페이스이기 때문에 물론 [OperationContract]와 같이 WCF 속성을 배치하기 위해 방법을 다시 선언해야합니다.결과적으로 나는 이전의 인터페이스 방법을 숨기고 '새로운'키워드를 배치해야합니다.이 상황 에서이 일을하는 것이 올바른 일입니까?WCF 인터페이스를 통해 DAO 인터페이스 방법을 제시 할 수 있어야하므로 이유를 상속하는 이유가 필요합니다.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);
}
}
.
대체 계획은 편안한 서비스 대신
제휴하지 않습니다 StackOverflow