ASP.NET WebHost 到 Host 迁移

问题描述 投票:0回答:1

我正在尝试将我的应用程序启动从

WebHost
迁移到(较新/推荐)
Host

当我改变时:

private static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseSerilog((hostingContext, loggerConfiguration) =>
            loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration));

public static void Main(string[] args)
{
    var host = CreateWebHostBuilder(args).Build();

    // start the app.
    host.Run();
}

至:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        })            // Add Serilog Logger
        .UseSerilog((hostingContext, loggerConfiguration) =>
            loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration));

public static void Main(string[] args)
{
    var host = CreateHostBuilder(args).Build();

    // start the app.
    host.Run();
}

我收到以下与依赖项注入相关的错误:

System.AggregateException:“无法构造某些服务(验证服务描述符时出错”ServiceType:Microsoft.Extensions.Localization.IStringLocalizer Lifetime:Singleton ImplementType:UniLocalizer.UniLocalizer”:没有类型“UniLocalizer.UniLocalizer”的构造函数可以使用服务容器中的服务和默认值进行实例化。)'

GPT 给了我线索,一些可能在

WebHost
中初始化的服务不是
Host
的默认服务(按设计应该更轻量),并且这些服务可能由 UniLocalizer 请求。

知道如何诊断/解决这个问题吗?

(对于 WebHost 应用程序工作正常)

c# asp.net-core dependency-injection
1个回答
0
投票

查看存储库中的代码后,问题与配置

UniLocalizer
进行依赖注入有关。该类没有无参数构造函数,并且其依赖项
IStorageProvider
string
(以及可选的
CultureInfo
)无法从容器解析,因为它们尚未配置为注入。

但是,似乎

UniLocalizer
类甚至不需要注入 ,因为解决方案中没有类注入它。相反,它是被注入并负责实例化 UniLocalizerFactory
 实例的 
UniLocalizer

解决此问题的两种方法:

  1. UniLocalizer
     类的第 57 行和第 58 行删除用于依赖注入的 
    UniLocalizer.ServiceExtensions
     配置。考虑到工厂类的使用,这个配置感觉没有必要。
  2. 另一个选项(不推荐)是使
  3. UniLocalizer
     可注入,可以通过向 
    UniLocalizer
     添加无参数构造函数(例如:
    public UniLocalizer() { }
    ),或者通过使用工厂方法委托配置其依赖项进行动态注入。这对我来说毫无用处,因为没有类直接注入
    UniLocalizer
    ,它完全违背了工厂模式的目的!
© www.soinside.com 2019 - 2024. All rights reserved.