如何将配置传递给ASP中的非控制器类.净MVC6
本文关键字:控制器 MVC6 ASP 配置 | 更新日期: 2023-09-27 18:05:58
我正在使用MVC6开发应用程序。我可以在启动文件中读取JSON配置,并在控制器中注入依赖项。
现在,我的要求是我想要访问非控制器类中的配置。在这种情况下,我不能使用构造函数DI。这些类驻留在MVC6应用程序的某个文件夹中,但它们不是模型或控制器类。
在这种非控制器类中访问配置的最佳方式是什么?谢谢。
更新:
只是为了澄清-我不能对这些类使用DI。
这些类只有在需要时才会基于某些条件被实例化,并且在它们上面调用方法。我需要从这些类/方法中访问JSON配置设置。到目前为止,我只知道这些方法:
将配置属性从启动设置为静态,以便我可以说
Startup.Configuration["..."]
。从Startup中读取JSON配置后设置自定义类的静态属性,然后访问这些静态属性
这些替代方案好吗(当然不是DI)?还有别的办法吗?
我要做的是创建一个像这样的注册服务方法:
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定位类时。配置对象也会自动注入到类中。
作为更好的解决方案,您可以使用接口而不是协调类。