服务类可以和如何从普通类继承?

时间:2016-02-10 06:13:16

标签: c# wcf inheritance service

我有两个服务TestService1和TestService2。我可以从没有ServiceBehaviorAttribute属性的普通类继承这两个服务吗?像这样:

public class ServiceBase
{
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService1 : ServiceBase, ITestService1
{
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService2 : ServiceBase, ITestService2
{
}

ServiceBehaviorAttribute属性的行为是否会应用于继承的普通类的继承成员?

我是否要将一些服务特定的属性添加到基本普通类?

如果我在实现中出错了,如何正确实现这样的继承 - 服务从另一个普通类继承了一些行为?

更新 它不是ServiceBehaviorAttribute attribute inheritance。我问更常见的问题 - 我可以在WCF服务类中继承另一个类(在外部DLL中,例如,甚至与WCF无关)的某些功能吗?如何?我的代码是否有效且没有隐藏的细微差别?

1 个答案:

答案 0 :(得分:1)

[ServiceBehavior]可以应用于基类,以便派生的服务类将继承行为。

改变这个:

public class ServiceBase
{
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService1 : ServiceBase, ITestService1
{
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class TestService2 : ServiceBase, ITestService2
{
}

......对此:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ServiceBase
{
}

public class TestService1 : ServiceBase, ITestService1
{
}

public class TestService2 : ServiceBase, ITestService2
{
}
  

我可以在WCF服务类中继承另一个类(即在外部DLL中,甚至与WCF无关)中的某些功能吗?

当然,ServiceBase可能有TestService1TestService2可能使用的方法。但是,即使ITestService1是公开的,WCF客户端也只会看到您的接口ITestService2ServiceBase.SomeMethod()上定义的方法。

e.g。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class ServiceBase
{
    // TestService1 and TestService2  may call me 
    // but not WCF clients. I'm invisible
    public void SomeMethod () {}
}

public class TestService1 : ServiceBase, ITestService1
{
    public void SomeServiceMethod1() { SomeMethod(); }
}

public class TestService2 : ServiceBase, ITestService2
{
    public void SomeServiceMethod2() { SomeMethod(); }
}

关于基类与WCF无关的更新,“是的,你可以”。与调用任何其他基类没什么不同。