Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:将一个接口继承到另一个将充当wcf接口的接口_C#_Inheritance_Interface_Method Hiding - Fatal编程技术网

C#:将一个接口继承到另一个将充当wcf接口的接口

C#:将一个接口继承到另一个将充当wcf接口的接口,c#,inheritance,interface,method-hiding,C#,Inheritance,Interface,Method Hiding,我问了一些与此相关的问题,但仍然没有结论性的答案,所以这里有一个更简单的问题 想想这个。我有两个接口。一个描述刀。一个是wcf接口。wcf接口继承dao接口,以便使用wcf属性公开其方法。因为它是一个wcf接口,我当然必须再次声明这些方法,以便在它们上面放置wcf属性,例如[OperationContract]。因此,我实际上隐藏了以前的接口方法,并且必须在其上放置“new”关键字。在这种情况下,这是正确的做法吗。我需要能够通过wcf接口呈现dao接口方法,因此需要继承它。我想强制wcf接口公开

我问了一些与此相关的问题,但仍然没有结论性的答案,所以这里有一个更简单的问题

想想这个。我有两个接口。一个描述刀。一个是wcf接口。wcf接口继承dao接口,以便使用wcf属性公开其方法。因为它是一个wcf接口,我当然必须再次声明这些方法,以便在它们上面放置wcf属性,例如[OperationContract]。因此,我实际上隐藏了以前的接口方法,并且必须在其上放置“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();  
    }
}

使用两个接口-不要为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);
     }
}

另一种方案可能是考虑使用服务代替。

< P>使用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);
     }
}

另一个计划可能是考虑使用服务代替。< / P >不确定你的意思。我使用两个接口。一个描述dao对象,另一个继承它,以便通过wcf公开dao函数。这基本上是一种迫使wcf将所有dao方法公开为操作契约的方法。不知道你的意思。我使用两个接口。一个描述dao对象,另一个继承它,以便通过wcf公开dao函数。它基本上是一种强制wcf将所有dao方法公开为操作契约的方法。