【发布时间】:2016-08-27 09:41:06
【问题描述】:
我希望有一个通用类型服务,即 -
public interface IFooService<T>
{
Task<T> Get(int id);
}
但是,Service Fabric 不允许泛型类或泛型方法。我也尝试过类似
public interface INinjaService : IService, IFooService<SuperNinja>
{
}
但它不拾取继承的接口声明
服务类型“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());
}
}
使用代码(从 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;
}
}
【问题讨论】:
-
可以分享
Omni.Fabric.Services.NinjaService源代码吗? -
@MikeMazmanyan 完成。
-
这个异常什么时候抛出?
-
服务类型 'Omni.Fabric.Services.NinjaService' 没有实现任何服务接口。服务接口是派生自“Microsoft.ServiceFabric.Services.Remoting.IService”类型的接口。
-
我知道异常需要了解什么时候抛出
标签: c# generics azure-service-fabric