【发布时间】:2019-02-19 21:12:20
【问题描述】:
我有一个引用典型 .NET Core 类库的“数据访问层”项目的 ASP.NET Core 2.1 项目。
数据访问层需要来自 ASP.NET Core 项目中 appsettings.json 的连接字符串。
我创建了一个像这样的简单容器:
public class DatabaseConnectionString : IDatabaseConnectionString
{
private readonly string _connectionString;
public DatabaseConnectionString(string connectionString)
{
_connectionString = connectionString;
}
public string ConnectionString {
get { return _connectionString; }
set { }
}
}
在 ASP.NET Core Startup.cs > ConfigureService 我有这个:
services.AddScoped<IDatabaseConnectionString>(p => new DatabaseConnectionString(Configuration.GetConnectionString("DefaultConnection")));
我知道我可以将 IDatabaseConnectionString 添加到 ASP.NET 中控制器的构造函数中以获取容器。但是在类库中如何获得它?我不想从控制器一路向下传递,只是将 IDatabaseConnectionString 添加到类库中类的构造函数中是行不通的。
我可能需要一个服务,我可以要求创建一个类的对象并让服务用正确的对象填充构造函数接口?
例如在这个类中填写IDatabasConnectionString:
public class UserFactory : FactoryBase
{
private readonly IDatabaseConnectionString _iDatabaseConnectionString;
public UserFactory(IDatabaseConnectionString connectionString)
{
_iDatabaseConnectionString = connectionString;
}
}
【问题讨论】:
-
希望
DatabaseConnectionString的空设置器只是一个错字或什么的。请不要创建一个空的二传手。如果不应该设置,则删除设置器。 -
“类库中类的构造函数的IDatabaseConnectionString不起作用”为什么不呢?
-
I dont want to pass it all the way down from the controller是什么意思?你把它通过了什么? -
谢谢,setter 已修复 :)
-
@Banshee 但是为什么需要将它放入控制器并将其传递给 5-10 个方法?你为什么不让你的 DAL 依赖于 IDatabaseConnectionString 本身,让 IoC 容器解决它?
标签: c# asp.net-core dependency-injection