【发布时间】:2020-05-22 00:58:16
【问题描述】:
我想阅读 appsettings.json 非控制器类。考虑有一个 DatabaseUtil 并包含一个静态 connect() 方法。我需要connectionString进行连接,我从appsettings.json得到这个。startup.cs中的这个操作小菜一碟:) 像这样:
Configuration.GetConnectionString("HangfireDBConn")
它也可以在控制器端进行依赖注入。但我的问题是想从 DatbaseUtil 类到达 appSettings。 appSettings.json:
"NotifySettings": {
"DbConnection": "abc",
"Email": "abc@domain.com",
"SMTPPort": "5605"
}
然后我创建了我的配置设置类:
public class NotifySettings
{
public string DbConnection { get; set; }
public string Email { get; set; }
public string SMTPPort { get; set; }
}
我将构造函数注入的依赖添加到DatabaseUtil 类并添加了IDatabaseUtil
public class DatabaseUtil : IDatabaseUtil
{
private static NotifySettings _NotifySettings;
public DatabaseUtil(IConfiguration _iconfig)
{
_NotifySettings = _iconfig.GetSection("NotifySettings").Get<NotifySettings>();
}
public static String ConnectToDatabase()
{
return "MESSAGE :" + _NotifySettings.DbConnection;
}
}
}
我将 DatabaseUtil 添加到 startup.cs
services.AddScoped<IDatabaseUtil, DatabaseUtil>();
最后,我将 IDatabaseUtil 注入到我的控制器类中,我可以完成这项工作的 mysettings 结束。
是的,我可以,但不是最好的方法!
让加入我的头脑风暴:) ;如果我必须向 IDatabaseUtil 注入我想使用 db 辅助方法的每个类。但是如果我在这个类中有一个静态方法,它只需要这行代码:
DatabaseUtils.connect();
感觉就像我写了不必要的代码。
您如何看待我的近似值。哪种方法最适合这种情况?
【问题讨论】:
-
您好 Onur:正如所写,这在很大程度上是一个主观评论,没有要解决的问题,因为除了描述依赖注入与静态实例之外,没有任何关于您的“案例”的真实上下文。是否有关于 DI 的具体问题?查看What types of questions should I avoid asking?
-
如果您有静态数据访问方法,那么您编写了不必要的代码 - 删除它。仅当您决定抽象数据库方法时才使用此代码。
-
感谢您提供有用的反馈@AdamG 实际上我的问题是关于近似值,有点高兴有问题。但如果您期望真正的问题问题可能是这样的:我如何到达 appsettings.json 文件我的 DatabaseUtil 类具有静态辅助方法(我想使用设置模型,我知道其他类型的解决方案)。
-
标签: c# .net api .net-core dependency-injection