C#:WCFインタフェースとして機能する別のインタフェースを継承する
-
12-12-2019 - |
質問
これに関連した質問に尋ねましたが、それでも決定的な答えがないので、ここでより簡単な質問です。
これを検討してください。私は2つのインターフェースを持っています。DAOを説明しています。1つはWCFインターフェースです。WCFインタフェースは、そのメソッドをWCF属性で公開するためにDAOインターフェイスを継承します。WCFインタフェースであるため、[OperationContract]などのWCF属性をそれらに配置するために、もちろん方法を再度宣言してください。その結果、私は前のインターフェースメソッドを隠すことができ、 'new'キーワードをそれらに配置する必要があります。これはこの状況でやるべき正しいことです。私は、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契約に1つのインターフェースを共有しないでください
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);
}
}
.
代替計画は、 respful サービス。
所属していません StackOverflow