【发布时间】:2020-02-14 22:02:48
【问题描述】:
我有一个类需要一个连接字符串作为其构造函数的参数:
public class MyClassHere
{
private string connectionString;
public MyClassHere(string connectionString)
{
this.connectionString = connectionString;
}
}
我已将该类作为单例添加到我的服务中,如下所示:
services.AddSingleton<MyClassHere>();
显然这不起作用,因为它在构造函数中需要一个字符串。
我见过这样的例子:
services.AddSingleton<MyClassHere>(new MyClassHere("Some Connnection String"));
但我也读过一些模糊的说法,当你这样做时,依赖注入系统不会为你清理你的对象。
将实例传递到依赖注入系统(而不是让它为您实现)有哪些缺点(如果有的话)?
【问题讨论】:
-
这是一个人为的例子,还是你专门将连接字符串传递给你的类,以便在这种特殊情况下它可以实例化一个连接到它本身的数据库上下文?我问是因为让 DI 容器提供 db 上下文实例会更典型?
-
“依赖注入系统不会为你清理你的对象”——没错。将实际实例注册为单例时,DI 容器不会在容器被释放时释放它们。但这仅在它们实际上是一次性的(例如,需要释放非托管资源或连接)时才重要。当容器被释放时,这通常意味着应用程序无论如何都会关闭。
标签: c# asp.net-core .net-core dependency-injection