ASP.NET5配置依赖项注入和静态控制器构造函数
ASP.NET5提供了一种将任何POCO类轻松转换为设置类的方法。使用它,我可以用json编写我的设置,然后将它们转换成一个类型化的对象,我可以将其注入到我的控制器中。因此,例如,ASP.NET5配置依赖项注入和静态控制器构造函数,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,ASP.NET5提供了一种将任何POCO类轻松转换为设置类的方法。使用它,我可以用json编写我的设置,然后将它们转换成一个类型化的对象,我可以将其注入到我的控制器中。因此,例如,Startup.cs中的我的ConfigureServices方法包含以下行 services.Configure来完成它的一些工作。为了降低启动DNN的成本,我从静态类构造函数开始这样做。静态构造函数是无参数的,因此我无法传入所需的设置对象,但我可以通过我的ConfigureServices方法在ItemsContr
Startup.cs
中的我的ConfigureServices
方法包含以下行
services.Configure来完成它的一些工作。为了降低启动DNN的成本,我从静态类构造函数开始这样做。静态构造函数是无参数的,因此我无法传入所需的设置对象,但我可以通过我的ConfigureServices
方法在ItemsController
上设置静态IOptions
属性。我该怎么做呢?依赖项注入器在哪里?我如何说服它给我一个IOptions
?我认为您看错了问题。问题是您有一个静态类,并且正在使用DI,而不是如何将依赖项注入到静态类中(这是不可能不借助一个或另一个hack实现的)
大多数DI容器都有一种单一的生活方式,允许您在应用程序中共享同一个对象实例。使用这种方法,不需要静态类。通过将静态类替换为单例实例来消除它,这样就可以将依赖项注入到构造函数中。很好。更好的思考方法和解决方案:-)有些类有静态组件和实例组件。例如,我有一个可配置的值,我想加载一次(静态)并在所有实例中使用。我应该把类一分为二并使用DI生存期控制吗?一般来说,您应该努力在组合根目录中进行所有配置。这意味着全局配置值应该流经服务的构造函数。您可以为配置提供一个单独的对象(比如XmlReaderSettings),或者创建一个抽象工厂,或者使用提供的值或逻辑默认值填充该类。对于很少从默认设置更改的设置,可以考虑使用公共属性而不是构造函数参数。