【发布时间】:2019-08-15 15:28:06
【问题描述】:
我的 .net 核心 MVC 应用程序,当我从 HomeController 读取 appsettings.json 时,它可以工作,但在其他类中,AppSettings 对象从未初始化。
谁能找出问题所在?
我创建了我的自定义类 AppSettings,其中属性名称映射到 appsettings.json 中的部分。
我已将其包含在 Startup.cs 中。
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
它在 HomeController 中工作:
private static AppSettings AppSettings { get; set; }
public HomeController(IOptions<AppSettings> settings)
{
AppSettings = settings.Value;
}
private void TestMethod()
{
// This works inside the HomeController
var dbString = AppSettings.DataBaseConnectionString;
}
然而,BusinessLogic 类中的这个构造函数永远不会被调用:
private static AppSettings AppSettings { get; set; }
public BusinessLogic(IOptions<AppSettings> settings)
{
AppSettings = settings.Value;
}
private void TestMethod()
{
// This does NOT work inside the BusinessLogic class. Appsettings is null.
var dbString = AppSettings.DataBaseConnectionString;
}
【问题讨论】:
-
你的“BusinessLogic”类和“HomeController”在同一个项目中吗?
-
是的,他们在同一个项目中。
-
您将设置对象注入到构造函数中。为此,您应该将 BusinessLogic 类注册为 IoC 容器中的服务。是这样吗?这个 BusinessLogic 类在哪里使用?
-
BLogic 类直接从 HomeC 调用,一切都在同一个 MVC 项目中。 HomeController.cs 位于 Controllers 文件夹中,因为它位于标准 MVC 项目中。 BusinessLogic.cs 位于另一个名为 Logic 的文件夹中,并且仅在此解决方案中的其他部分调用此类。为什么相同的代码在 HomeC 中有效,但在 i BLogic 中无效?我正在以完全相同的方式进行操作,并且没有以任何特殊方式注册 HomeC。关于 IoC 容器,我无法真正回答你,这个术语对我来说是新的。
-
services.AddOptions();你添加了吗?
标签: .net-core asp.net-core-mvc