Asp.net core 在asp.net核心页面中使用具有部分视图的DI

Asp.net core 在asp.net核心页面中使用具有部分视图的DI,asp.net-core,dependency-injection,inversion-of-control,partial-views,asp.net-core-razor-pages,Asp.net Core,Dependency Injection,Inversion Of Control,Partial Views,Asp.net Core Razor Pages,正在使用以下行使用局部视图(否则工作完全正常;如果不使用DI,则为): LocationList的ctor接受LocationDbContext类的对象,该对象基本上是DbContext的子对象 然而,事实证明,我无法在对分部函数的调用中实例化LocationDbContext 如何更正此问题?我认为您应该使用而不是局部视图。视图组件类似于具有模型、视图和控制器的局部视图。您可以直接将Dbcontext插入其中 public class YourViewComponent : ViewCom

正在使用以下行使用局部视图(否则工作完全正常;如果不使用DI,则为):


LocationList的ctor接受
LocationDbContext
类的对象,该对象基本上是
DbContext
的子对象
然而,事实证明,我无法在对分部函数的调用中实例化
LocationDbContext

如何更正此问题?

我认为您应该使用而不是局部视图。视图组件类似于具有模型、视图和控制器的局部视图。您可以直接将Dbcontext插入其中

public class YourViewComponent : ViewComponent
{
private readonly LocationDbContext dbContext;

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

public async Task<IViewComponentResult> InvokeAsync()
{
 //...
}
}
公共类YourViewComponent:ViewComponent
{
私有只读位置dbContext;
公共YourViewComponent(LocationDbContext dbContext)
{
this.dbContext=dbContext;
}
公共异步任务InvokeAsync()
{
//...
}
}
有关详细信息,请参见或此

编辑:

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

@inject System.Net.Http.HttpClient HttpClient
@注入WebApplication150.Data.WebApplication150Context上下文

另外,部分原因是否相同?是的,我在回复中也提到了此线程,但很抱歉,我无法标记它。完成,如中所示,标记为重复
@inject System.Net.Http.HttpClient httpClient
@inject WebApplication150.Data.WebApplication150Context context

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