具有通用服务的服务结构

Ton*_*ony 5 c# generics azure-service-fabric

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

public interface IFooService<T> 
{
   Task<T> Get(int id);
}
Run Code Online (Sandbox Code Playgroud)

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

public interface INinjaService : IService, IFooService<SuperNinja>
{


}
Run Code Online (Sandbox Code Playgroud)

但它没有拿起继承的接口说明

服务类型"Omni.Fabric.Services.NinjaService"未实现任何服务接口.服务接口是从"Microsoft.ServiceFabric.Services.Remoting.IService"类型派生的接口.

我似乎无法在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());
    }
}
Run Code Online (Sandbox Code Playgroud)

使用代码(从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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Vac*_*cek 5

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

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

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

    public string Foo()
    {
        // do foo
    }
}
Run Code Online (Sandbox Code Playgroud)

这可以。

什么是不支持是远程过程调用(RPC)的通用接口。这是特定于服务远程通信堆栈的,这是IService和远程通信侦听器所具有的。

因此,就您而言,不,尚不支持泛型。但这是特定服务通信堆栈的限制,而不是一般服务的限制,当然,您可以使用所需的任何通信堆栈