小编Luc*_*lip的帖子

带有 IHtmlHelper 参考的自定义剃须刀助手

我正在玩 ASP.NET Core,并试图将我的助手迁移到它。我已将自己的帮助程序注入到视图中,但我需要访问默认的 IHtmlHelper (我不想扩展 HtmlHelper)。

所以,我像这样构建了我的构造函数,以从 IoC 获取具体的 IHtmlHelper。

public FWHtmlHelper(IHtmlHelper htmlHelper)
{
        this._htmlHelper = htmlHelper;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试访问帮助程序时,出现以下错误:

InvalidOperationException:在使用此 HtmlHelper 实例之前必须调用“Contextualize”方法。

那么,我如何创建自己的帮助程序并访问 View html 帮助程序实例?

*根据要求编辑:

添加到容器中

services.AddTransient(typeof(IFWHtmlHelper<>), typeof(FWHtmlHelper<>));
Run Code Online (Sandbox Code Playgroud)

将其注入到视图中

@inject IFWHtmlHelper<TModel> FWHtml
Run Code Online (Sandbox Code Playgroud)

然后,我为我的助手创建了一个扩展

public static TagBuilder Example<TModel, TValue>(this IFWHtmlHelper<TModel> fwHelper, Expression<Func<TModel, TValue>> expression)
{} 
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core

5
推荐指数
1
解决办法
2927
查看次数

如何使用 IoC 访问 HotChocolate (GraphQL) 请求的查询

我正在尝试使用 hotchocolate 提高 sql 查询性能。为此,我想在应用程序的另一层访问 hotchololate 生成的查询请求。我能找到的唯一方法是拦截请求,将我需要的信息存储在 HttpContext 项中,然后在我需要的地方注入 IHttpContextAccessor。

services.AddQueryRequestInterceptor(GraphQLRequestInterceptor);
...
private Task GraphQLRequestInterceptor(HttpContext context, IQueryRequestBuilder requestBuilder, CancellationToken cancellationToken)
{
    IReadOnlyQueryRequest request = requestBuilder.Create();
    context.Items.Add("graph", request);
}
Run Code Online (Sandbox Code Playgroud)

然后通过注入 IHttpContextAccessor 来恢复它

public ClientesQueries(Microsoft.AspNetCore.Http.IHttpContextAccessor contextAccessor)
{
   var queryRequest = contextAccessor.HttpContext.Items["graph"] as IReadOnlyQueryRequest;
}
Run Code Online (Sandbox Code Playgroud)

使用该代码,我可以创建一个表达式来查询数据库,仅查找客户端请求的数据。

有更好的方法来实现这一目标吗?

entity-framework-core graphql hotchocolate

0
推荐指数
1
解决办法
3696
查看次数