You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在.NET Core 6中无需控制器/视图,能否在Program.cs直接获取配置服务?

在Program.vb中直接获取已配置的服务选项

我目前可以通过构造注入在控制器中读取各类服务选项,示例代码如下:

Public Class HomeController
    Inherits Controller

    Private ReadOnly _logger As ILogger(Of HomeController)
    Private ReadOnly _RazorPagesOptions As RazorPages.RazorPagesOptions
    Private ReadOnly _RazorViewEngineOptions As Razor.RazorViewEngineOptions
    Private ReadOnly _MvcViewOptions As Mvc.MvcViewOptions
    Private ReadOnly _IdentityOptions As Identity.IdentityOptions
    Private ReadOnly _MvcOptions As Mvc.MvcOptions
    Private ReadOnly _CookieAuthenticationOptions As Authentication.Cookies.CookieAuthenticationOptions
    Private ReadOnly _AuthenticationOptions As Authentication.AuthenticationOptions
    Private ReadOnly _RouteOptions As Routing.RouteOptions
    Private ReadOnly _HostOptions As Microsoft.Extensions.Hosting.HostOptions
    Private ReadOnly _KestrelServerOptions As Server.Kestrel.Core.KestrelServerOptions
    Private ReadOnly _HostFilteringOptions As HostFiltering.HostFilteringOptions
    Private ReadOnly _ApiBehaviorOptions As Mvc.ApiBehaviorOptions
    Private ReadOnly _AntiforgeryOptions As Antiforgery.AntiforgeryOptions

    Public Sub New(ByVal logger As ILogger(Of HomeController),
                   RazorPagesOptions As IOptions(Of RazorPages.RazorPagesOptions),
                   RazorViewEngineOptions As IOptions(Of Razor.RazorViewEngineOptions),
                   MvcViewOptions As IOptions(Of Mvc.MvcViewOptions),
                   IdentityOptions As IOptions(Of Identity.IdentityOptions),
                   MvcOptions As IOptions(Of Mvc.MvcOptions),
                   CookieAuthenticationOptions As IOptions(Of Authentication.Cookies.CookieAuthenticationOptions),
                   AuthenticationOptions As IOptions(Of Authentication.AuthenticationOptions),
                   RouteOptions As IOptions(Of Routing.RouteOptions),
                   HostOptions As IOptions(Of Microsoft.Extensions.Hosting.HostOptions),
                   KestrelServerOptions As IOptions(Of Server.Kestrel.Core.KestrelServerOptions),
                   HostFilteringOptions As IOptions(Of HostFiltering.HostFilteringOptions),
                   ApiBehaviorOptions As IOptions(Of Mvc.ApiBehaviorOptions),
                   AntiforgeryOptions As IOptions(Of Antiforgery.AntiforgeryOptions))
        _logger = logger

        _RazorPagesOptions = RazorPagesOptions.Value
        _RazorViewEngineOptions = RazorViewEngineOptions.Value
        _MvcViewOptions = MvcViewOptions.Value
        _IdentityOptions = IdentityOptions.Value
        _MvcOptions = MvcOptions.Value
        _CookieAuthenticationOptions = CookieAuthenticationOptions.Value
        _AuthenticationOptions = AuthenticationOptions.Value
        _RouteOptions = RouteOptions.Value
        _HostOptions = HostOptions.Value
        _KestrelServerOptions = KestrelServerOptions.Value
        _HostFilteringOptions = HostFilteringOptions.Value
        _ApiBehaviorOptions = ApiBehaviorOptions.Value
        _AntiforgeryOptions = AntiforgeryOptions.Value
    End Sub
End Class

另外也可以通过@inject指令将服务注入到视图中。

现在我想知道:有没有不需要依赖控制器或视图的方式,直接在Program.vb中完成同样的操作?比如在App.Run()之前(或者替代App.Run()),获取上述所有已配置的项目选项列表?

我的Program.vb基础结构如下:

Sub Main(Args() As String)
    Dim Builder = WebApplication.CreateBuilder(Args)
    ' 配置服务等操作
    ....
    Dim App = Builder.Build
    ' 配置中间件等操作
    ...
    App.Run()
End Sub

内容的提问来源于stack exchange,提问作者user18928007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:54:14