0

我有一个解决方案,它包含一个 .NET Core Windows 服务项目。而且,我正在使用 .NET Standard 自定义 NuGet 包。我的代码结构如下:

public class MyCustomPackage
{
    private readonly IDependentService;
    private readonly ModelValues;

    public MyCustomPackage(IDependentService service, ModelValues modelValues)
    {
    }
}

在上面的代码中,ModelValues类是一个只包含属性的具体类。

在 Windows 服务项目中,我正在阅读应用程序设置部分并将值存储到一个模型类中,例如ConfiguartionModelValues.

我已经使用 AutoMapper 编写了一个映射以转换ConfigurationModelValuesModelValues. 但我不确定如何ModelValues在启动类中注入实例。

以前,我IOptions<ModelValues>在构造函数中使用,因此可以使用services.Configure<ModelValues>(Configuration.GetSection("sectionName"));. 这工作正常,但我觉得它与应用程序设置文件紧密结合。所以为了避免我正在尝试不同的方法。

4

1 回答 1

1

你可以这样做:

public void ConfigureServices(IServiceCollection services)
{
    ConfiguartionModelValues values = ReadConfigurationValues();

    services.AddSingleton(new ModelValues(a: values.A, b: values.B, c: values.C));
}

笔记:

  • 此代码示例创建一个ModelValues对象并将其注册为容器中的单例。这可确保在应用程序期间重复使用具有相同配置值的相同实例。
  • 对于在启动时仅创建一次的简单配置对象,使用 AutoMapper 构造它似乎没有用(IMO)。手动进行映射通常更简单。
  • 通过将ModelValues作为单例添加到容器中,它将能够将其注入到 MyCustomPackage.
于 2020-07-30T09:17:17.700 回答