如何将配置传递给ASP中的非控制器类.净MVC6

本文关键字:控制器 MVC6 ASP 配置 | 更新日期: 2023-09-27 18:05:58

我正在使用MVC6开发应用程序。我可以在启动文件中读取JSON配置,并在控制器中注入依赖项。

现在,我的要求是我想要访问非控制器类中的配置。在这种情况下,我不能使用构造函数DI。这些类驻留在MVC6应用程序的某个文件夹中,但它们不是模型或控制器类。

在这种非控制器类中访问配置的最佳方式是什么?

谢谢。

更新:

只是为了澄清-我不能对这些类使用DI。

这些类只有在需要时才会基于某些条件被实例化,并且在它们上面调用方法。我需要从这些类/方法中访问JSON配置设置。到目前为止,我只知道这些方法:

  1. 将配置属性从启动设置为静态,以便我可以说Startup.Configuration["..."]

  2. 从Startup中读取JSON配置后设置自定义类的静态属性,然后访问这些静态属性

这些替代方案好吗(当然不是DI)?还有别的办法吗?

如何将配置传递给ASP中的非控制器类.净MVC6

我要做的是创建一个像这样的注册服务方法:

 public static void AddMyTools(this IServiceCollection services, IConfiguration config){
      //Save the config in the class
 }

在这个静态方法中,我将在这个静态类中存储我需要的配置。

然后在Startup.cs中,我将使用我的工具的命名空间,然后在ConfigureServices部分,我将添加我的工具,如下所示:

 services.AddMyTools(Configuration); 

希望它能帮助你。我没有尝试,也许有些变化,但你有全球的想法。(我正在搜索这个,@Sam Farajpour Ghamari用他的答案给了我这个想法)

您可以将您的配置注入到您想要的任何类中。只需在构造方法中注入配置类。

class MyConfig()
{
   // your configuration members
}
class MyBLClass(MyConfig config)
{
    private MyConfig _config;
    public MyBLClass(MyConfig config)
    {
        _config=config;
    }
    // use the _config in your class
}

然后在DI中注册你的BI类

container.RegisterSelf<MyBLClass>(); // just an example read your DI doc

因此,每当您要求DI定位类时。配置对象也会自动注入到类中。

作为更好的解决方案,您可以使用接口而不是协调类。