【发布时间】:2021-03-17 06:11:42
【问题描述】:
我正在尝试使用 GraphQL .Net 在我的 GraphQL 服务器上设置订阅。我遵循了QraphQL.Net 文档中的文档和 Roland Guijt 的 PluralSight 课程,并在网上查找了更多信息。
我所拥有的看起来应该可以工作。我有我的订阅方法,它将 IObserverable 返回到事件流字段。我也尝试过使用函数来传递 IObserverable,但它仍然不起作用。
这是我的订阅
public class MyObjectSupscription : ObjectGraphType
{
private readonly MyObjectObservable _myObjectObservable;
private readonly MyObjectSubjectHelper _myObjectSubjectHelper;
public MyObjectSupscription(SportsEventObservable myObjectObservable, SportsEventSubjectHelper myObjectSubjectHelper)
{
Name = "Subscription";
_sportsEventObservable = myObjectObservable;
_sportsEventSubjectHelper = myObjectSubjectHelper;
AddField(new EventStreamFieldType
{
Name = "MyObjectAdded",
Type = typeof(MyObjectType),
Resolver = new FuncFieldResolver<MyObject>(ResolveMessage),
Subscriber = new EventStreamResolver<MyObject>(Subscribe),
});
}
private IObservable<SportsEvent> Subscribe(IResolveEventStreamContext context)
{
return _myObjectObservable;
// return _myObjectSubjectHelper.MyObjects(); //This uses a replaySubject as an observerable
}
private MyObject ResolveMessage(IResolveFieldContext context)
{
return context.Source as MyObject;
}
当我跟踪代码并在 GraphQL .Net 包中放置断点时,它会进入 EventStream 订阅者
public class EventStreamResolver<T> : IEventStreamResolver<T>
{
private readonly Func<IResolveEventStreamContext, IObservable<T>> _subscriber;
public EventStreamResolver(
Func<IResolveEventStreamContext, IObservable<T>> subscriber)
{
_subscriber = subscriber ?? throw new ArgumentNullException(nameof(subscriber));
}
public IObservable<T> Subscribe(IResolveEventStreamContext context) => _subscriber(context);
IObservable<object> IEventStreamResolver.Subscribe(IResolveEventStreamContext context) => (IObservable<object>)Subscribe(context);
}
看起来它应该调用我的 IObserverable 中的 Subscribe 方法,但是我在这里放置的断点没有到达。
我的 Observerable 已在 AutoFac 中注册为 Singleton,并且我的 GraphQL 突变和查询工作,因此看起来 GraphQL 设置正确且工作正常。我的 observable 中的 notify 方法是在将 MyObject 添加到数据库后调用的。
【问题讨论】:
-
你有没有发现是什么原因造成的?我自己也遇到了类似的问题
-
我做过,但我忘记了这个问题。我不记得我到底做了什么改变,但我认为这是这个问题github.com/graphql-dotnet/graphql-dotnet/issues/2494 和 QraphiQL 在我测试时无法正常工作的组合。我切换到 Altair,它开始工作了。我的 GitHub 上有一个示例实现,现在可以使用 github.com/jeffrfinn/GraphQLNetSample
-
我会尝试回顾我所做的并发布正确的答案
-
那太好了。谢谢杰夫
标签: .net-core graphql graphql-dotnet