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

时间:2015-08-03 07:41:29

标签: c# asp.net-mvc asp.net-core-mvc

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

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

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

谢谢。

更新

只是为了澄清 - 我不能在这些课程中使用DI。

这些类仅在需要时基于某些条件进行实例化,并且在它们上调用方法。我需要从这些类/方法中访问JSON配置设置。所以,我只知道这些方式:

  1. 将Startup的Configuration属性设置为static,以便我可以说Startup.Configuration["..."]

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

  3. 这些替代品是否好(当然除了DI)?还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

 services.AddMyTools(Configuration); 
希望它对你有所帮助。我没有尝试过,也许有些改变,但你有全球性的想法。 (我正在寻找这个和@Sam Farajpour Ghamari用他的回答给我这个想法)

答案 1 :(得分:0)

您可以将配置注入所需的任何类。只需在构造方法上注入配置类。

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找到课程时。 config对象也自动注入到类中。

作为更好的解决方案,您可以使用界面而不是音乐会类。