ASP.Net 5 配置依赖注入(inject)和静态 Controller 构造函数

标签 asp.net asp.net-mvc

ASP.Net 5 提供 options pattern轻松将任何 POCO 类转换为设置类。使用它,我可以在 json 中编写我的设置,然后将它们转换为可以注入(inject)到我的 Controller 中的类型化对象。例如,我的 ConfigureServices Startup.cs中的方法包含行

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

然后使用依赖注入(inject)将其传递到我的 Controller 的构造函数中

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

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

最佳答案

我认为你看问题的方式是错误的。问题是你有一个静态类并且正在使用 DI,而不是如何将依赖项注入(inject)到静态类中(如果不诉诸 service locator 或其他 hack 就无法完成此操作)。 p>

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

关于ASP.Net 5 配置依赖注入(inject)和静态 Controller 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35159341/

相关文章:

asp.net - 发生403错误时如何阻止IIS 7.0重定向到自己的页面

c# - 用户控件内联代码中的调用函数并不总是有效

c# - 捆绑和缩小错误

c# - 在存储库模式中,我应该使用数据库模型作为我的 View 模型还是应该为此创建单独的 ViewModel?

asp.net - 从另一个 Controller 获取带有参数的 returnUrl

c# - HttpResponseMessage.Content.ReadAsStreamAsync() 与 HttpResponseMessage.Content.ReadAsStringAsync()

javascript - 如何在 DropdownList 更改后刷新页面以便执行 JavaScript

c# - 将 ActionResult 返回到对话框。 ASP.NET MVC

c# - SQLCommand批量更新查询

c# - C# MongoClient 是否可以在不首先序列化为 .NET 类型的情况下用于返回有效的 JSON?