Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET MVC6中将配置传递给非控制器类_C#_Asp.net Mvc_Asp.net Core Mvc - Fatal编程技术网

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

C# 如何在ASP.NET MVC6中将配置传递给非控制器类,c#,asp.net-mvc,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core Mvc,我正在使用MVC6开发一个应用程序。我可以读取启动文件中的JSON配置,并将其注入控制器中 现在,我的要求是,我希望访问非控制器类内部的配置。在这种情况下,我不能使用构造函数DI。这些类位于MVC6应用程序的某个文件夹中,但它们不是模型或控制器类 在这种非控制器类中访问配置的最佳方式是什么 多谢各位 更新: 只是澄清一下——我不能在这些类中使用DI 这些类仅在基于某些条件需要时实例化,并对它们调用方法。我需要从这些类/方法中访问JSON配置设置。到目前为止,我只知道这些方法: 将启动时的配置属性

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

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

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

多谢各位

更新:

只是澄清一下——我不能在这些类中使用DI

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

  • 将启动时的配置属性设置为静态,这样我就可以说
    Startup.Configuration[“…”]

  • 在读取JSON配置后从启动时设置自定义类的静态属性,然后访问这些静态属性


  • 这些替代品好吗(当然不是DI)?还有其他方法吗?

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

    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
    
    container.RegisterSelf();//只是一个例子,请阅读您的DI文档
    
    因此,每当您要求DI定位该类时。config对象也自动注入到类中


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

    我要做的是创建一个注册服务方法,如下所示:

     public static void AddMyTools(this IServiceCollection services, IConfiguration config){
          //Save the config in the class
     }
    
    在这个静态方法中,我将在这个静态类中存储我需要的配置

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

     services.AddMyTools(Configuration); 
    

    希望对你有帮助。我没有尝试过,也许有些改变,但你有全球的想法。(我一直在寻找这个问题,@Sam Farajpour Ghamari用他的答案告诉我答案)

    这些“非控制器类”是什么类型的类?它们在哪里使用?他们的生命周期是什么?一些包含一些业务逻辑,一些是助手和实用程序。他们需要访问存储在配置文件中的设置。然后将它们连接到DI系统并注入它们?似乎你有一个错误的前提,即不能将DI用于某些类。您可以将它用于任何类型的类,而不仅仅是控制器和模型空间,在这些类中,我使用构造函数方法将设置注入其中,然后抱怨我没有传递设置对象,因此它们需要DI链接到控制器。对吗?