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)
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和远程通信侦听器所具有的。
因此,就您而言,不,尚不支持泛型。但这是特定服务通信堆栈的限制,而不是一般服务的限制,当然,您可以使用所需的任何通信堆栈。