Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
ASP.NET5配置依赖项注入和静态控制器构造函数_Asp.net_Asp.net Mvc - Fatal编程技术网

ASP.NET5配置依赖项注入和静态控制器构造函数

ASP.NET5配置依赖项注入和静态控制器构造函数,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,ASP.NET5提供了一种将任何POCO类轻松转换为设置类的方法。使用它,我可以用json编写我的设置,然后将它们转换成一个类型化的对象,我可以将其注入到我的控制器中。因此,例如,Startup.cs中的我的ConfigureServices方法包含以下行 services.Configure来完成它的一些工作。为了降低启动DNN的成本,我从静态类构造函数开始这样做。静态构造函数是无参数的,因此我无法传入所需的设置对象,但我可以通过我的ConfigureServices方法在ItemsContr

ASP.NET5提供了一种将任何POCO类轻松转换为设置类的方法。使用它,我可以用json编写我的设置,然后将它们转换成一个类型化的对象,我可以将其注入到我的控制器中。因此,例如,
Startup.cs
中的我的
ConfigureServices
方法包含以下行


services.Configure来完成它的一些工作。为了降低启动DNN的成本,我从静态类构造函数开始这样做。静态构造函数是无参数的,因此我无法传入所需的设置对象,但我可以通过我的
ConfigureServices
方法在
ItemsController
上设置静态
IOptions
属性。我该怎么做呢?依赖项注入器在哪里?我如何说服它给我一个
IOptions

我认为您看错了问题。问题是您有一个静态类,并且正在使用DI,而不是如何将依赖项注入到静态类中(这是不可能不借助一个或另一个hack实现的)


大多数DI容器都有一种单一的生活方式,允许您在应用程序中共享同一个对象实例。使用这种方法,不需要静态类。通过将静态类替换为单例实例来消除它,这样就可以将依赖项注入到构造函数中。

很好。更好的思考方法和解决方案:-)有些类有静态组件和实例组件。例如,我有一个可配置的值,我想加载一次(静态)并在所有实例中使用。我应该把类一分为二并使用DI生存期控制吗?一般来说,您应该努力在组合根目录中进行所有配置。这意味着全局配置值应该流经服务的构造函数。您可以为配置提供一个单独的对象(比如XmlReaderSettings),或者创建一个抽象工厂,或者使用提供的值或逻辑默认值填充该类。对于很少从默认设置更改的设置,可以考虑使用公共属性而不是构造函数参数。