【发布时间】:2016-03-17 04:25:47
【问题描述】:
我想使用 DI 在我的 api 控制器中手动注入 IDBConnection。我知道我可以把它放在构造函数中:
public MyController(IDBConnection cnn) { this._Connection = cnn; }
或者我可以使用[FromServices] 属性:
[FromServices]
public IDbConnection _Connection { get; set; }
我可以在这样的视图中使用它:
@inject IDbConnection cnn
我真正想做的是将它放在using 中,并让 DI 打开连接,这样我就可以执行以下操作:
using (var cnn = Services.Inject<IDbConnection>()) {
// do something, don't worry about opening or closing
}
我是这样声明的:
services.AddTransient<IDbConnection>(x =>
{
string connectionString = Configuration.Get<string>(
"Data:DefaultConnection:ConnectionString");
return new SqlConnection(connectionString);
});
我是否应该创建一个继承自 SqlConnection 的类,在其构造函数中调用 Open()?如何从那里访问Configuration?我可以这样创建它来注入配置或连接字符串...using 不需要吗?仅创建实例基本上没有开销,因此某些操作是否需要与不同数据库的多个连接无关紧要?
【问题讨论】:
标签: dependency-injection asp.net-core-mvc