【问题标题】:.NET Core Dependency Injection for model class模型类的 .NET Core 依赖注入
【发布时间】:2020-11-20 00:07:12
【问题描述】:

我有一个解决方案,它包含一个 .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 编写了一个映射来将 ConfigurationModelValues 转换为 ModelValues。但我不确定如何在启动类中注入ModelValues 实例。

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

【问题讨论】:

    标签: .net-core dependency-injection automapper startup concreteclass


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2016-05-22
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多