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

时间:2016-02-02 16:56:32

标签: asp.net asp.net-mvc

ASP.Net 5提供了一个options pattern,可以轻松地将任何POCO类转换为设置类。使用这个我可以在json中编写我的设置然后将它们变成一个可以注入我的控制器的打字对象。因此,例如,ConfigureServices中的Startup.cs方法包含行

services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

然后使用依赖注入将其传递给我的控制器构造函数

public ItemsController(IOptions<AppSettings> settings) { /* do stuff */ }

我的一个控制器启动了一个DNN来完成它的一些工作。为了降低启动DNN的成本,我从静态类构造函数中做到了这一点。静态构造函数是无参数的,因此我无法传递所需的设置对象,但我可以从IOptions<AppSettings>方法在ItemsController上设置静态ConfigureServices属性。我该怎么做?依赖注入器在哪里?我如何说服它给我一个IOptions<AppSettings>

1 个答案:

答案 0 :(得分:5)

我认为你看错了。问题是你静态类并且正在使用DI,而不是如何将依赖项注入静态类(如果不诉诸service locator或其他hack就无法完成)。

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