【问题标题】:Using a DI with partial views in asp.net core razor pages [duplicate]在 asp.net core razor 页面中使用带有部分视图的 DI [重复]
【发布时间】:2021-05-07 07:36:12
【问题描述】:

使用以下行正在使用部分视图(否则工作完全正常;当不使用 DI 时):

<partial
    name="Partials/SelectLoc"
    model="new Partials.SelectLocModel(new HttpClient(), (<this is the part with DI>))" />

LocationList 的 ctor 采用 LocationDbContext 类的对象,该对象基本上是 DbContext 的子对象。
但是,事实证明,我无法在对部分的调用中实例化 LocationDbContext

我该如何纠正这个问题?

【问题讨论】:

  • 另外,与this的部分原因相同吗?
  • 是的,我在回复中也提到了这个话题,但是很抱歉,我无法举报。
  • 完成,如中,标记为重复

标签: asp.net-core dependency-injection inversion-of-control partial-views asp.net-core-razor-pages


【解决方案1】:

我认为你应该使用View components而不是局部视图。视图组件就像具有模型、视图和控制器的局部视图。您可以直接将Dbcontext注入其中。

public class YourViewComponent : ViewComponent
{
private readonly LocationDbContext dbContext;

public YourViewComponent (LocationDbContext dbContext)
{
    this.dbContext = dbContext;
}

public async Task<IViewComponentResult> InvokeAsync()
{
 //...
}
}

关于详情可以看doc或者这个thread

编辑:

我认为也可以像这样(示例)在您的视图中注入您的服务。

@inject System.Net.Http.HttpClient httpClient
@inject WebApplication150.Data.WebApplication150Context context

<partial name="Partials/SelectLoc"
     model="new Pages.SelectLocModelModel(httpClient,context)"/>

【讨论】:

    猜你喜欢
    • 2018-06-05
    • 2021-05-06
    • 2018-12-20
    • 2018-02-24
    • 2021-08-08
    • 2019-06-28
    • 2018-04-05
    • 2019-05-22
    • 2020-10-10
    相关资源
    最近更新 更多