Глядя на источник , кажется, что промежуточное ПО применяется к схеме в течение жизненного цикла запроса, а затем, как мне кажется, каким-то образом откатывается в конце? По крайней мере, я предполагаю, что именно так используется элемент public void ApplyTo(ISchema schema)
, хотя я не уверен, как происходила часть «отката».
Это дало мне представление о том, как решить проблему путемвытащить промежуточное программное обеспечение из представления и поместить его в конструктор схемы, например:
public class MySchema : Schema
{
public MySchema()
{
this.Query = new MyQuery();
this.Mutation = new MyMutation();
var builder = new FieldMiddlewareBuilder();
builder.Use(next => context =>
{
return next(context).ContinueWith(x=> {
var result = x.Result;
return doStuff(result);
});
});
builder.ApplyTo(this);
}
}
Итак, теперь промежуточное программное обеспечение запекается непосредственно в схему, когда создается синглтон, а у контроллера нетсделать что-нибудь.
Это, кажется, полностью решило проблему. Я не уверен, есть ли другие вещи в graphql-dotnet, которые изменяют схему в течение жизненного цикла запроса. Если кто-нибудь знает о каких-либо других проблемах, которые могут возникнуть с одноэлементной схемой, я бы хотел это услышать!