gpt4 book ai didi

c# - 具有通用服务的服务结构

转载 作者:太空狗 更新时间:2023-10-29 22:57:39 25 4
gpt4 key购买 nike

我希望有一个通用类型的服务,即 -

public interface IFooService<T> 
{
Task<T> Get(int id);
}

但是,服务结构不允许泛型类或泛型方法。我也尝试过类似的东西

public interface INinjaService : IService, IFooService<SuperNinja>
{


}

但它不会获取声明的继承接口(interface)

The service type 'Omni.Fabric.Services.NinjaService' does not implement any service interfaces. A service interface is the one that derives from 'Microsoft.ServiceFabric.Services.Remoting.IService' type.

我似乎无法在 Service Fabric 文档或 stackoverflow 上找到任何对泛型的引用。要么它仍然太新,要么可能我走错了路。有没有人有幸实现这种模式?可以吗?应该做吗?

根据要求提供 NinjaService

public class NinjaService : StatelessService, INinjaService
{

public NinjaService(StatelessServiceContext serviceContext) : base(serviceContext)
{
}


protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context)) };
}


public Task<SuperNinja> Get(int id)
{
return Task.FromResult(new SuperNinja());
}
}

使用代码(从 Owin WebApi 服务调用

    public async Task<SuperNinja> Get(int key)
{
try
{
INinjaService service = ServiceProxy.Create<INinjaService>(new Uri("fabric:/Omni.Fabric/Services"));

var t = await service.Get(key).ConfigureAwait(false);

return t;
}
catch (Exception ex)
{
throw;
}
}

最佳答案

Service Fabric 中的服务可以实现通用接口(interface):

interface IMyService<T>
{
T Foo();
}

class Stateful1 : StatefulService, IMyService<string>
{
public Stateful1(StatefulServiceContext context)
: base(context)
{ }

public string Foo()
{
// do foo
}
}

这很好。

支持的是远程过程调用 (RPC) 的通用接口(interface)。这是特定于 Service Remoting 通信堆栈的,它是 IService 和 Remoting Communication Listener 所拥有的。

所以在您的情况下,不,泛型还不受支持。但这是特定服务通信堆栈的限制,而不是一般服务的限制,当然你可以使用 any communication stack you want .

关于c# - 具有通用服务的服务结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36985580/

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