gpt4 book ai didi

c# - 在现有接口(interface)上应用 ServiceContract 和 OperationContract

转载 作者:行者123 更新时间:2023-11-30 14:15:08 24 4
gpt4 key购买 nike

我有一些在整个系统中使用的现有接口(interface)。

现在我想使用其中一个接口(interface)作为服务契约(Contract)。

但问题是我需要在现有接口(interface)上添加 [ServiceContract][OperationContract] 属性,它们会污染其余代码。

有没有不复制接口(interface)的解决方案?

在具体实现上应用属性?这是一个好习惯吗?

谢谢

最佳答案

您可以简单地使用 service-warpper 类型的接口(interface)扩展接口(interface),即:

public interface IMyCode
{
string GetResult();
}

[ServiceContract]
public interface IMyCodeService : IMyCode
{
[OperationContract]
string GetResult();
}

C#允许接口(interface)继承,编译器会吐出IMyCodeService.GetResult requires new的警告,因为它隐藏了IMyCode.GetResult方法,但没有追加new 不会破坏实现,例如:

class Program
{
static void Main(string[] args)
{
MyCodeService service = new MyCodeService();
IMyCodeService serviceContract = (IMyCodeService)service;
IMyCode codeContract = (IMyCode)service;

service.GetResult();
serviceContract.GetResult();
codeContract.GetResult();

Console.ReadKey();
}
}

public interface IMyCode
{
void GetResult();
}

public interface IMyCodeService : IMyCode
{
void GetResult();
}

public class MyCodeService : IMyCodeService
{
public void GetResult()
{
Console.Write("I am here");
}
}

这样,您可以在不更改现有代码的情况下,基于现有接口(interface)提供服务契约。

如果您共享您的契约(Contract)程序集而不是使用 WCF 为您生成代理,您甚至可以在您接受现有接口(interface)的地方传递您的服务契约(Contract),因为服务接口(interface)继承自它。

关于c# - 在现有接口(interface)上应用 ServiceContract 和 OperationContract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com